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

时间:2015-04-30 16:05:55

标签: c++ macos cmake

我尝试了什么

我正在使用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.Created sample c ++ application

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

  1. 构建应用程序
  2. 执行应用程序后,它需要来自 / usr / local / lib

    的依赖项包的库文件

    我想要什么

    在我安装了caffe依赖项后,我将所有库文件复制到另一个位置。

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

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

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

1 个答案:

答案 0 :(得分:1)

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

onCreate

您也可以在命令行上运行Fragment

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

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

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

在OSX-land中install_name_tool是你的实际二进制文件所在的目录。应用程序的打包方式如下: cp ./libMyLib.dylib App.app/Contents/Resources/@executable_path中还有一个名为App.app/Contents/MacOS/App的文件夹,如果我不希望用户必须自己安装,这通常会隐藏依赖项。因此,在这种情况下,App.app/Contents是从应用程序的二进制文件到dylib将要到达的相对路径。

您可以使用Resources将库放在任何您想要的位置。我觉得这是个好地方。

顺便说一句,您可以使用@executable_path/../Resources检查库的当前ID。可能,如果你运行

install_name_tool

它将返回类似otool -L的内容,即使您将其移动到其他位置也是如此。尝试使用> otool -L caffe.dylib更改ID,然后再次运行/usr/local/lib,看看会发生什么。那时候应该有意义。