Ошибка при сборке NewTek NDI 3.0 SDK на iOS - PullRequest
0 голосов
/ 28 июня 2018

выпуск

Я пытаюсь скомпилировать тестовый проект 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 (и я протестировал последнюю бета-версию с теми же результатами)

Шаги, которые я предпринял, чтобы получить эту ошибку:

  1. Установите NewTek NDI SDK со своего веб-сайта здесь
  2. Создание нового проекта Xcode для одного приложения Objective-C для iOS
  3. Переименуйте ViewController.m в ViewController.mm (поэтому он скомпилирован как Objc ++)
  4. Добавить /NewTek NDI SDK/include в пути поиска заголовка
  5. Добавить /NewTek NDI SDK/lib/iOS к путям поиска в библиотеке
  6. Добавьте libndi_ios.a в разделе «Связать двоичные файлы с библиотеками» в «Фазы сборки».
  7. Добавьте этот код в 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, запросив его на их веб-сайте здесь .

Ответы [ 2 ]

0 голосов
/ 30 июня 2018

Обратившись в службу поддержки NewTek по этой проблеме и связавшись с этим сообщением, они обновили (или находятся в процессе обновления) библиотеку, входящую в состав SDK. Я верю, что это будет опубликовано на их сайте в ближайшее время.

Спасибо и Lightlive.dev, и emrahgunduz за ваши предложения 100

0 голосов
/ 29 июня 2018

использовать версию статической библиотеки ofxNDI ofiakiiwatani.

https://github.com/nariakiiwatani/ofxNDI/blob/master/libs/NDI/lib/iOS/libndi_ios.a

Я решил ту же проблему с помощью его статической версии библиотеки.

...