2016-10-30 4 views
3

Я делаю простую установку с сайта openkinect для использования xbox kinect. Проблема в том, что нет дистрибутива OSX, и предполагается, что homebrew позаботится об установке для вас.Как изменить RPATH на OS X

На последнем этапе установки я столкнулся с полезной подсказкой о том, что не так с моей установкой.

Об этом сообщается на сайте. «Если у вас есть проблемы с связыванием, вы должны изменить RPATH каждого libfreenect Lib [используя следующие команды]:»

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/ и NOT /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>. Обратите внимание, что вы также можете изменить rpath с install_name_tool подобным образом (не попытался это еще себя):

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

и, возможно, последнее примечание: Я предпочитаю, чтобы установить инструменты, которые я строю себя местный (например, /opt/dev или какой-либо пользовательский каталог), чтобы не испортить другие установки, которые были получены из других каналов (например, macport, brew и т. д.).Это также мешает вам требовать sudo ops, как в вашем примере.

Смежные вопросы