gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:45:03 25 4
gpt4 key购买 nike

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

Brew 安装解决了这个问题,但是有必要“按原样”分发这个插件。

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

2) 我怎样才能让我的项目从包中加载它们,而不是从/usr/local/opt? (我尝试使用 -static 进行链接,但出现 136 个错误“体系结构 x86_64 的 undefined symbol - _OSSpinLockLock、_dispatch_get_global_queue 和许多其他”)。

最佳答案

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

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

另请注意 Xcode Build Settings 中与此相关的“Runpath Search Path”选项。

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

关于c++ - 如何避免在 C++ 项目(XCode)中的其他机器上加载动态库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40556687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com