1 Problem
这篇文章的缘由是我在尝试使用ns3带的NetAnim程序时,显示了下面这个错误:
1 | dyld: Library not loaded: @rpath/QtGui.framework/Versions/4/QtGui |
这是一个动态链接的错误,所以没法通过编译的时候添加LDFLAGS
来解决。不过错误里面的@rpath
这个东西倒是挺有意思,显然并不是环境变量。我在网上查了很多,但是大多数是围绕xcode讨论的,不太适用于我面临的场景(命令行)。不过这些文章(如这篇)能够大致阐明@rpath
的用途。简而言之,@rpath
是一个类似Shell中的PATH
的变量,程序在执行时会从@rpath
指定的路径中寻找动态链接库文件。那么剩下的问题就是我们如何操作这个变量了。
2 Solution
通过otool
我们可以查看一个程序的动态链接文件搜索地址,例如我要用的NetAnim
:
1 | $ otool -L ./NetAnim |
而我们可以通过install_name_tool
来对这些地址进行操作。
1 | $ install_name_tool -h |
对我而言,我需要将Qt4的动态链接库添加到NetAdmin
的搜索路径中去,可以使用如下的命令:
1 | install_name_tool -add_rpath /usr/local/Cellar/qt@4/4.8.7_3/lib ./NetAnim |
大功告成。