我正在尝试使用我的应用程序分发cairo(1.10.2)。我可以使用Homebrew创建必要的dylib但它们依赖于OS X 10.5中不存在的其他动态库的版本(libfontconfig,libfreetype和主要位于/usr/X11/lib
中的其他动态库)。
我假设要解决此问题,我希望它使用/Developer/SDKs/MacOSX10.5.sdk/usr/X11/lib
中的dylib而不是/usr/X11/lib
中的库。我已经尝试过针对10.5 SDK定位cairo的任何内容。
MACOSX_DEPLOYMENT_TARGET
环境变量设置为10.5
(在致电brew
或使用Homebrew的ENV
之前)SDKROOT
环境变量设置为“/Developer/SDKs/MacOSX10.5.sdk”(在调用brew
或使用Homebrew的ENV
之前)-mmacosx-version-min=10.5
添加到cairo的Homebrew公式中的CFLAGS
,CXXFLAGS
和LDFLAGS
。-sysroot
/ -isysroot /Developer/SDKs/MacOSX10.5.sdk
添加到cairo的Homebrew公式中的CFLAGS
,CXXFLAGS
和LDFLAGS
。-I$(SDKROOT)/usr/X11/include
和-I$(SDKROOT)/usr/X11R6/include
添加到cairo的Homebrew公式中的CFLAGS
和CXXFLAGS
。-L$(SDKROOT)/usr/X11/lib
和-L$(SDKROOT)/usr/X11R6/lib
添加到cairo的Homebrew公式中的LDFLAGS
。在构建cairo时,它在gcc命令上有-I/usr/X11/lib
(我的选项在末尾添加了),所以我想它首先击中了它。我不知道如何摆脱它,所以它使用我的选项。我认为isysroot
会这样做,因此包含和库路径在SDK中被重新连接,但-isysroot
似乎没有任何效果。
答案 0 :(得分:1)
您应该可以使用install_name_tool
来更改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
而不是/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/
以确保脚本可以找到库。