выпуск
Я пытаюсь скомпилировать тестовый проект iOS с помощью SDK NDI v3.0, и я сталкиваюсь с ошибками Apple Mach-O Linker (ld).
Это статическая структура (libndi_ios.a
), с которой вы должны связать свой двоичный файл и ссылаться на заголовки, чтобы использовать их C / C ++ API в нашем коде ObjC ++.
Я копирую их пример кода, который просто создает NDIlib_send_instance_t
для использования. Как только я пытаюсь скомпилировать этот код, сборка завершается с ошибкой компоновщика:
Undefined symbols for architecture armv7:
"NDI_multicast::send::packetize::~packetize()", referenced from:
std::__1::__shared_ptr_emplace<NDI_multicast::send::packetize, std::__1::allocator<NDI_multicast::send::packetize> >::~__shared_ptr_emplace() in libndi_ios.a(send_server.o)
std::__1::__shared_ptr_emplace<NDI_multicast::send::packetize, std::__1::allocator<NDI_multicast::send::packetize> >::~__shared_ptr_emplace() in libndi_ios.a(send_server.o)
std::__1::__shared_ptr_emplace<NDI_multicast::send::packetize, std::__1::allocator<NDI_multicast::send::packetize> >::__on_zero_shared() in libndi_ios.a(send_server.o)
NDI_multicast::send::send(NDI_multicast::send::config_multicast_t const&) in libndi_ios.a(NDI_multicast_send.o)
NDI_multicast::send::send(NDI_multicast::send::config_unicast_t const&) in libndi_ios.a(NDI_multicast_send.o)
NDI_multicast::send::~send() in libndi_ios.a(NDI_multicast_send.o)
"NDI_multicast::send::packetize::packetize()", referenced from:
ndi::reference::send::server::send(ndi::reference::buffer_pack const&, ndi::reference::send::connection*) in libndi_ios.a(send_server.o)
NDI_multicast::send::send(NDI_multicast::send::config_multicast_t const&) in libndi_ios.a(NDI_multicast_send.o)
NDI_multicast::send::send(NDI_multicast::send::config_unicast_t const&) in libndi_ios.a(NDI_multicast_send.o)
"NDI_multicast::send::packetize::operator()(std::__1::function<std::__1::pair<unsigned char const*, unsigned long> (unsigned long, unsigned long)>)", referenced from:
ndi::reference::send::server::send(ndi::reference::buffer_pack const&, ndi::reference::send::connection*) in libndi_ios.a(send_server.o)
NDI_multicast::send::operator()(NDI_multicast::send::buffer_source_t&, std::__1::pair<int, int>, std::__1::function<void (bool)>) in libndi_ios.a(NDI_multicast_send.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
воспроизводящий
Вы можете воспроизвести эту ошибку, выполнив следующие шаги. В настоящее время я использую Xcode 9.4 (и я протестировал последнюю бета-версию с теми же результатами)
Шаги, которые я предпринял, чтобы получить эту ошибку:
- Установите NewTek NDI SDK со своего веб-сайта здесь
- Создание нового проекта Xcode для одного приложения Objective-C для iOS
- Переименуйте
ViewController.m
в ViewController.mm
(поэтому он скомпилирован как Objc ++)
- Добавить
/NewTek NDI SDK/include
в пути поиска заголовка
- Добавить
/NewTek NDI SDK/lib/iOS
к путям поиска в библиотеке
- Добавьте
libndi_ios.a
в разделе «Связать двоичные файлы с библиотеками» в «Фазы сборки».
Добавьте этот код в ViewController.mm:
NDIlib_initialize();
NDIlib_send_create_t NDI_send_create_desc;
NDI_send_create_desc.p_ndi_name = "My Audio";
NDI_send_create_desc.clock_audio = true;
// (Without this line, everything compiles fine...)
NDIlib_send_instance_t pNDI_send = NDIlib_send_create(&NDI_send_create_desc);
Это не удастся с ошибкой выше.
Одна вещь, которая мне показалась интересной, заключалась в том, что использование другого кода из их примеров, например, для получения видео, работало как ожидалось. Проблема существует только при использовании NDIlib_send_create
API.
У кого-нибудь есть советы или идеи, чтобы одолжить?
Вы можете найти NewTek iOS SDK, запросив его на их веб-сайте здесь .