在 iOS 上构建 NewTek NDI 3.0 SDK 时出错
Error when building the NewTek NDI 3.0 SDK on iOS
问题
我正在尝试使用 NDI v3.0 SDK 编译一个 iOS 测试项目,但我 运行 进入 Apple Mach-O 链接器 (ld) 错误。
这是一个静态框架 (libndi_ios.a
),你要 link 你的二进制文件,并引用 headers 以便在其中使用它们的 C/C++ API我们的 ObjC++ 代码。
我正在复制他们的示例代码,它只是创建一个 NDIlib_send_instance_t
供使用。一旦我尝试编译此代码,构建就会失败并出现此 linker 错误:
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 here
- 为单个视图创建新的 Xcode 项目 Objective-C iOS 应用程序
- 将
ViewController.m
重命名为 ViewController.mm
(因此它被编译为 Objc++)
- 将
/NewTek NDI SDK/include
添加到 Header 搜索路径
- 将
/NewTek NDI SDK/lib/iOS
添加到库搜索路径
- 在"Build Phases"中的"Link Binary With Libraries"下添加
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.
时存在
有没有人有任何提示或想法可以借鉴?
您可以在他们的网站 here 上请求找到 NewTek iOS SDK。
使用 nariakiiwatani 的 ofxNDI 静态库版本。
https://github.com/nariakiiwatani/ofxNDI/blob/master/libs/NDI/lib/iOS/libndi_ios.a
我用他的静态库版本解决了同样的问题
在就此问题联系 NewTek 的支持人员并链接到此 post 后,他们已经更新(或正在更新)SDK 中包含的库。我相信它很快就会 post 在他们的网站上发布。
感谢 Lightlive.dev 和 emrahgunduz 的建议
问题
我正在尝试使用 NDI v3.0 SDK 编译一个 iOS 测试项目,但我 运行 进入 Apple Mach-O 链接器 (ld) 错误。
这是一个静态框架 (libndi_ios.a
),你要 link 你的二进制文件,并引用 headers 以便在其中使用它们的 C/C++ API我们的 ObjC++ 代码。
我正在复制他们的示例代码,它只是创建一个 NDIlib_send_instance_t
供使用。一旦我尝试编译此代码,构建就会失败并出现此 linker 错误:
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 here
- 为单个视图创建新的 Xcode 项目 Objective-C iOS 应用程序
- 将
ViewController.m
重命名为ViewController.mm
(因此它被编译为 Objc++) - 将
/NewTek NDI SDK/include
添加到 Header 搜索路径 - 将
/NewTek NDI SDK/lib/iOS
添加到库搜索路径 - 在"Build Phases"中的"Link Binary With Libraries"下添加
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.
有没有人有任何提示或想法可以借鉴?
您可以在他们的网站 here 上请求找到 NewTek iOS SDK。
使用 nariakiiwatani 的 ofxNDI 静态库版本。
https://github.com/nariakiiwatani/ofxNDI/blob/master/libs/NDI/lib/iOS/libndi_ios.a
我用他的静态库版本解决了同样的问题
在就此问题联系 NewTek 的支持人员并链接到此 post 后,他们已经更新(或正在更新)SDK 中包含的库。我相信它很快就会 post 在他们的网站上发布。
感谢 Lightlive.dev 和 emrahgunduz 的建议