您应该能够使用install_name_tool
来更改 cairo 查找其库的位置。(我不知道 cairo 是什么。我假设它是一个 dylib。如果不是,我对这个解决方案的信心就会大大下降。)
这是一个您应该能够适应的虚构示例。
首先,用于otool -L
查看 cairo 正在使用哪些库。在本例中,我使用的是 libopencv_imgproc.2.3.1.dylib,但您将使用 cairo 库的文件名:
$ otool -L libopencv_imgproc.2.3.1.dylib
libopencv_imgproc.2.3.1.dylib:
lib/libopencv_imgproc.2.3.dylib (compatibility version 2.3.0, current version 2.3.1)
lib/libopencv_core.2.3.dylib (compatibility version 2.3.0, current version 2.3.1)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)
然后用于install_name_tool -change
更改您需要更改的任何路径。第一个参数是当前库路径,第二个是想要的库路径,第三个是库文件。我告诉它寻找libz.1.dylib
in/Developer/SDKs/MacOSX10.5.sdk/usr/X11/lib/
而不是/usr/lib
:
$ install_name_tool -change /usr/lib/libz.1.dylib /Developer/SDKs/MacOSX10.5.sdk/usr/X11/lib/libz.1.dylib libopencv_imgproc.2.3.1.dylib
对需要更改其路径的每个库重复此操作。otool -L
向我们展示了所做的更改:
$ otool -L libopencv_imgproc.2.3.1.dylib
libopencv_imgproc.2.3.1.dylib:
lib/libopencv_imgproc.2.3.dylib (compatibility version 2.3.0, current version 2.3.1)
lib/libopencv_core.2.3.dylib (compatibility version 2.3.0, current version 2.3.1)
/Developer/SDKs/MacOSX10.5.sdk/usr/X11/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.3)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)
在我的示例中(也许在您的应用程序中),我的库希望在我的应用程序包之外的某个地方找到自己,因此我也需要使用install_name_tool -id
. 我将库复制到我的应用程序包的Frameworks文件夹中,所以我告诉它去那里看:
$install_name_tool -id @executable_path/../Frameworks/libopencv_imgproc.2.3.1.dylib libopencv_imgproc.2.3.1.dylib
您可以将install_name_tool
调用置于运行脚本构建阶段。如果要将库复制到应用程序包的Frameworks文件夹中,则应在库名称前面加上$BUILT_PRODUCTS_DIR/$FRAMEWORKS_FOLDER_PATH/
以确保脚本可以找到该库。