繁体   English   中英

如何避免在C ++项目(XCode)中的其他计算机上加载动态库?

[英]How to avoid loading dynamic libraries on other machine in C++ project (XCode)?

我正在使用OSC的OpenCV在Xcode中创建C ++ Unity插件。该插件可以在Mac上编译并运行,但是在其他计算机上,它尝试从/ usr / local /加载动态库(例如ffmpeg,libtiff,webp)。 opt ...(未加载库:/usr/local/opt/webp/lib/libwebp.6.dylib等)

Brew install解决了该问题,但是必须“按原样”分发此插件。

我有两个问题:1)我怎么知道我的项目是否尝试使用动态库(在另一台机器上)?

2)如何使我的项目从捆绑软件而不是从/ usr / local / opt加载它们? (我尝试使用-static进行链接,但是有136个错误“体系结构x86_64的未定义符号-_OSSpinLockLock,_dispatch_get_global_queue等)。

我不确定如何回答您的第一个问题...如果您不知道您的项目链接到谁的项目库?

对于第二个问题。 您需要设置动态库的“安装名称”。 您将轻松找到有关它的详细信息以及可用于操作它的install_name_tool命令行,但是从本质.dylib ,它是刻在.dylib自身内部的变量,用于存储路径。 该路径告诉链接到它的二进制文件在哪里找到它。 将dylib捆绑到可部署文件中时,安装名称通常设置为@executable_path/path/relative/to/executable/ 安装名称可以在将库编译为编译器标志时设置,也可以稍后在dylib文件中使用install_name_tool进行设置。

还要注意与此相关的Xcode构建设置中的“运行路径搜索路径”选项。

我希望这足以为您指出所需的方向。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM