gpt4 book ai didi

c++ - 如何更改 CMake MAC OSX 中的库路径?

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

我尝试过的

我正在 MAC OSX 中使用 Caffe 模型运行示例应用程序。我从 https://github.com/BVLC/caffe 下载了 Caffe 源 。步骤:

1.按照Caffe Link中的说明为caffe安装依赖包。一些包在 /usr/local/lib 和一些包 /opt/local/lib

2.在 CMake GUI 中使用 CMakeLists.txt 构建共享库 (SO) 文件。

3.创建示例 C++ 应用程序

4.将所有依赖项和caffe库文件与c++应用程序链接。

  1. 构建应用

我执行应用后,需要/usr/local/lib中依赖包的库文件

我想要什么

我安装caffe依赖后,把所有的库文件都复制到另一个地方

如何在Cmake.中链接指定位置的库文件?

在 Mac osx 中,当应用程序运行时,它采用库形式 /usr/local/lib 不在当前文件夹(应用程序文件夹)中。

如何设置应用程序以从当前文件夹中获取库文件?

最佳答案

这是我用来制作 OSX 应用程序的 makefile 中的命令(名称已更改以保护无辜者):

install_name_tool -id "@executable_path/../Resources/libMyLib.dylib"./libMyLib.dylib

您也可以只在命令行上运行 install_name_tool

-id 之后的第一个参数是您想要的目标(包括库的名称),第二个是库的当前路径——即二进制文件本身。在此示例中,库与 makefile 位于同一文件夹中。

然后,在我构建应用程序之后(链接器将在您构建的二进制文件中包含这个指向所需库的新路径),我将库复制到 Resources 文件夹:

cp ./libMyLib.dylib App.app/Contents/Resources/

在 OSX 环境中,@executable_path 是您的实际二进制文件所在的任何目录。应用程序的打包方式如下:App.app/Contents/MacOS/AppApp.app/Contents 中还有一个名为 Resources 的文件夹,如果我不希望用户必须自己安装依赖项,我通常会在该文件夹中存放依赖项/她自己。因此,在这种情况下,@executable_path/../Resources 是从应用程序的二进制文件到 dylib 所在位置的相对路径。

您可以使用 install_name_tool 将库放在您想要的任何位置。我只是觉得这是一个做这件事的好地方。

顺便说一句,您可以使用otool -L 查看库的当前ID。可能,如果你跑

> otool -L caffe.dylib

它会返回类似于 /usr/local/lib 的内容,即使您将它移到其他地方也是如此。尝试使用 install_name_tool -id 更改 id,然后再次运行 otool -L,看看会发生什么。在这一点上它应该是有意义的。

关于c++ - 如何更改 CMake MAC OSX 中的库路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29972626/

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