我正在从openkinect的网站上进行简单的安装,以使用xbox kinect。问题是没有OSX发行版,并假设自制软件将为您安排。
在安装的最后一步,我找到了一个有用的线索,说明我的安装有什么问题。
网站告诉我。 “如果链接有问题,你必须使用以下命令更改每个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
的库有关,这使得这个问题更容易解决。
如何正确执行上面第一段代码的任何帮助都会有所帮助!
子注(类似问题):
答案 0 :(得分:3)
不确定这对您的案例是否真的有用。但我经常能够通过适当的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操作,如您的示例所示。