2015-04-30 132 views
2

我已經試過如何更改CMake MAC OSX中的庫路徑?

我正在使用來自Caffe模型在MAC OSX示例應用程序。我從https://github.com/BVLC/caffe下載了Caffe源碼。 步驟:

1.如Caffe Link所述,爲caffe安裝依賴包。有些軟件包是在/ usr/local/lib目錄和一些包的/ opt/local/lib目錄

在CMake的GUI使用的CMakeLists.txt

2.Builded共享庫(SO)文件。

3.Created樣品C++應用

4.Linked所有依賴性和CAFFE庫文件與C++應用程序。

  • 內置應用
  • 我執行的應用程序之後,它所需的依賴包的庫文件從的/ usr /本地/ lib中

    什麼我想要

    我安裝了caffe依賴項之後,我將所有庫文件複製到另一個位置。

    如何鏈接庫的指定位置文件在Cmake。

    在Mac OS X中,當應用程序運行時,它不會在當前文件夾(應用程序文件夾)中使用庫表格/usr/local/lib

    如何設置應用程序從當前文件夾中獲取庫文件。

    +0

    這些咖啡依賴動態庫(有.dylib後綴)? – dmedine

    +0

    我的理解是,在OSX中,動態庫會標記其路徑,以便在構建應用程序時它將在該位置進行搜索。你可以用'install_name_tool'來改變它,但是你想在構建之前這樣做,否則應用程序會查找錯誤的位置。 – dmedine

    +0

    現在我想到了,Mac使用.so文件嗎?我以爲它只是.dylib ... – dmedine

    回答

    1

    下面是從我使用,使OSX版應用程序(它們的名稱已更改爲保護無辜者)一個makefile的命令:

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

    用戶也可以直接在命令行中運行install_name_tool

    -id後的第一個參數是你想要的目的地(包括庫的名稱),第二個參數是庫的當前路徑 - 即二進制本身。在這個例子中,庫與makefile位於同一個文件夾中。

    然後,當我構建應用程序(鏈接器將包括在你構建二進制所需的庫中的新路徑)我的庫複製到資源文件夾:

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

    在OSX- land @executable_path是您的實際二進制文件所在的目錄。應用打包的方式如下所示: App.app/Contents/MacOS/App。在App.app/Contents中還有一個文件夾叫做Resources,如果我不希望用戶必須自行安裝它,這通常是我存儲依賴關係的地方。因此,在這種情況下,@executable_path/../Resources是從應用程序的二進制文件到dylib的相對路徑。

    您可以使用install_name_tool將圖書館放在任何你想要的地方。我只是覺得這是一個很好的去處。

    順便說一句,你可以檢查目前的圖書館編號是otool -L。也許,如果您運行

    > otool -L caffe.dylib

    它會返回類似/usr/local/lib,即使你移動到其他地方。嘗試用install_name_tool -id更改ID,然後再次運行otool -L,看看會發生什麼。這點應該是有道理的。

    +0

    這是一個可喜的答案;令人驚訝的是,這些信息如何隱藏在線上。 – sdgfsdh