我尝试了什么
我正在使用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库文件。
执行应用程序后,它需要来自 / usr / local / lib
的依赖项包的库文件我想要什么
在我安装了caffe依赖项后,我将所有库文件复制到另一个位置。
如何在 Cmake。中链接库文件的指定位置?
在Mac osx中,当应用程序运行时,它会使库形式 / usr / local / lib 不在当前文件夹(应用程序文件夹)中。
如何将应用程序设置为从当前文件夹中获取库文件。?
答案 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
,看看会发生什么。那时候应该有意义。