我正在从 openkinect 网站进行简单安装以使用 xbox kinect。问题是没有 OSX 发行版,并且假设自制软件会为您完成安装。
在安装的最后一步,我发现了一条有用的线索,了解我的安装出了什么问题。
网站告诉我的。 “如果链接出现问题,则必须更改每个 libfreenect 库的 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
中的库有关,这使得这个问题更容易解决。
任何有关如何正确执行上面第一段代码的帮助都会很有帮助!
子注释(类似问题):
最佳答案
不确定这对您的情况是否真的有帮助。但我经常能够解决 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
或某些用户目录),以免弄乱从其他 channel (如 macport、brew、 ETC)。这也可以防止您需要 sudo 操作,如您的示例所示。
关于macos - 如何在 OS X 上更改 RPATH,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40325858/