2016-10-30 110 views
3

我正在從openkinect的網站進行簡單安裝以使用xbox kinect。問題是沒有OSX發行版,並且假定自制軟件會爲您安裝。如何更改OS X上的RPATH

在安裝的最後一步,我找到了一個有用的線索,說明我的安裝有什麼問題。

我被網站告知。 「如果你有鏈接的問題,你必須改變的每個libfreenect LIB [使用以下命令]將rpath:」

for i in /opt/local/lib/libfreenect*.dylib; do sudo install_name_tool -id $i $i; done 
sudo install_name_tool -change libfreenect.0.2.dylib /opt/local/lib/libfreenect.0.2.dylib /opt/local/lib/libfreenect_sync.dylib 
sudo install_name_tool -change libfreenect.0.2.dylib /opt/local/lib/libfreenect.0.2.dylib /opt/local/lib/libfreenect_cv.dylib 
sudo install_name_tool -change libfreenect_sync.0.2.dylib /opt/local/lib/libfreenect_sync.0.2.dylib /opt/local/lib/libfreenect_cv.dylib 
for i in glview regview hiview glpclview tiltdemo record cppview cvdemo; do sudo install_name_tool -change libfreenect.0.2.dylib /opt/local/lib/libfreenect.0.2.dylib /opt/local/bin/$i; sudo install_name_tool -change libfreenect_sync.0.2.dylib /opt/local/lib/libfreenect_sync.0.2.dylib /opt/local/bin/$i; done 

我rpath的肯定是設置錯誤。這個與CMake一起構建的次要信息絕對證實了我的疑惑。

CMake Warning (dev): 
    Policy CMP0042 is not set: MACOSX_RPATH is enabled by default. Run "cmake 
    --help-policy CMP0042" for policy details. Use the cmake_policy command to 
    set the policy and suppress this warning. 

    MACOSX_RPATH is not specified for the following targets: 

    fakenect 
    freenect 
    freenect_sync 

我唯一的問題是,上面給我的命令不起作用。部分原因是我的Mac將我的所有文件放在/usr/local/lib/而不是/opt/local/lib/。我將usr中的一些文件複製到opt,並減少了鏈接錯誤的數量,但我仍然留有一些。再次,他們都必須處理沒有加載到opt的庫,這使得這個問題更容易解決。

任何關於如何正確執行上面第一塊代碼的幫助將會很有幫助!

注子(類似的問題):

回答

2

不知道這是你的情況真的很有幫助。但我經常能解決rpath - 相關問題,正確cmake參數:

INSTALL_DIR="/where/it/goes" 
cmake .. \ 
    -DCMAKE_BUILD_TYPE=Release \ 
    -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" \ 
    -DCMAKE_MACOSX_RPATH=ON \ 
    -DCMAKE_INSTALL_RPATH="$INSTALL_DIR/lib" 

時不時地(舉例來說如果手頭上的項目不正確設置連接屬性),我還是得搞安裝後請使用install_name_tool。例如:

install_name_tool -change \ 
    @rpath/QtWidgets.framework/Versions/5/QtWidgets \ 
    /opt/dev/lib/qt/QtWidgets.framework/Versions/5/QtWidgets \ 
    "$INSTALL_DIR/lib/libvtkRenderingQt-7.1.1.dylib" 

這裏,libvtkRenderingQt-7.1.1.dylib是從一個CMake的項目,具有相同的CMake標誌建從上面創建的庫。由於某些原因,libvtkRenderingQt無法從Qt框架中找到資源,該框架已通過上述命令修復。在僞語法:

install_name_tool -change <old-path> <new-path> <file> 

...其中<old-path>顯示一個otool -L <file>。請注意,你也可以用類似的方式與install_name_tool改變rpath(沒有嘗試過這一點,但我自己):

install_name_tool -rpath <old-path> <new-path> <file> 

,也許最後一個音符:我喜歡安裝的是我自己建一個本地的工具目錄(例如/opt/dev或某個用戶​​目錄)不會搞亂從其他通道獲取的其他安裝(如macport,brew等)。這也可以防止你要求sudo操作,就像你的例子。

相關問題