ios - 在 iOS 上构建 NewTek NDI 3.0 SDK 时出错
问题描述
问题
我正在尝试使用 NDI v3.0 SDK 编译一个 iOS 测试项目,但我遇到了 Apple Mach-O Linker (ld) 错误。libndi_ios.a
它是一个静态框架(
我正在复制他们的示例代码,这些代码只是创建了一个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(我已经在最新的 beta 上进行了测试,结果相同)
我为得到这个错误而采取的步骤:
- 在此处从他们的网站安装 NewTek NDI SDK
- 为单视图 Objective-C iOS 应用程序创建一个新的 Xcode 项目
- 重命名
ViewController.m
为ViewController.mm
(所以编译为 Objc++) - 添加
/NewTek NDI SDK/include
到标题搜索路径 - 添加
/NewTek NDI SDK/lib/iOS
到库搜索路径 libndi_ios.a
在“Build Phases”中的“Link Binary With Libraries”下添加。将此代码添加到 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。
解决方案
使用 nariakiiwatani 的 ofxNDI 静态库版本。
https://github.com/nariakiiwatani/ofxNDI/blob/master/libs/NDI/lib/iOS/libndi_ios.a
我通过他的静态库版本解决了同样的问题。
推荐阅读
- flutter - 颤动中的幻灯片过渡外观容器
- reactjs - cookie ASP.NET / React.js 的问题 - 不保存
- excel - Excel VBA 生成的复选框未与单元格对齐
- excel - 仅搜索列中可见的空单元格,如果发现可见空单元格,则将左侧的值从空单元格复制到空单元格
- variables - 变量中的count()返回0,即使它应该返回2
- c++ - 指向函数成员的指针
- word-wrap - gedit 3.36.2 中的自定义换行符
- python - Python 保留关键字作为参数不起作用(尽管它应该?)
- javascript - 无法在codeigniter 4中编辑数据,点击编辑按钮时出现错误信息
- linux - Apache webserver raspberry pi 权限被拒绝 wsgi