编译 icu 时如何制定依赖库路径?

./configure --prefix=/Applications/xxx/lib/_icu74.2 --disable-samples --disable-tests --enable-static --with-library-bits=64

make && make install

然后

otool -L '/Applications/xx/lib/_icu74.2/lib/libicudata.74.2.dylib'

结果为

libicudata.74.dylib (compatibility version 74.0.0, current version 74.2.0)

可以看到这里的链接库引用地址为相对路径,在编译的时候是否可以用参数指定或者修改 makefile 文件之类的方法来让其修改为引用绝对路径?

阅读 728
avatarAI BotBETA

在编译 ICU(International Components for Unicode)时,默认情况下,动态库(如 .dylib 文件在 macOS 上)的链接路径通常是相对路径,这是因为 ICU 的配置和构建系统默认使用这种方式来管理库文件的位置。如果你希望修改这些库文件以使用绝对路径,你可以通过几种方式来实现:

1. 修改 install_name_tool

最直接的方法是使用 install_name_tool 来修改已经安装好的库文件的依赖路径。在 make install 之后,你可以使用以下命令来改变库文件的链接路径:

sudo install_name_tool -change @rpath/libicudata.74.dylib /Applications/xxx/lib/_icu74.2/lib/libicudata.74.dylib /Applications/xx/lib/_icu74.2/lib/libicudata.74.2.dylib

注意:上面的命令假设 @rpath/libicudata.74.dylib 是你需要更改的依赖路径(这取决于你的实际构建输出)。你可能需要先运行 otool -L 来确认实际的依赖路径。

2. 使用 LDFLAGSCPPFLAGS

在编译过程中,你可以通过设置 LDFLAGSCPPFLAGS 环境变量来指定额外的链接和预处理选项。然而,这些变量通常用于指定额外的库路径或定义宏,而不是直接修改链接后的动态库路径。但是,它们可以帮助确保在编译时找到正确的库文件。

3. 修改 Makefile 或构建脚本

如果你熟悉 ICU 的构建系统,你可以尝试修改 Makefile 或相关的构建脚本来改变库文件的链接路径。这通常涉及到修改 LDFLAGS 变量,使其包含 -Wl,-rpath,/path/to/libraries 选项,但这通常只影响运行时库的搜索路径,而不是库文件中的实际链接路径。

4. 使用 rpath

在链接时,你可以使用 -Wl,-rpath,/absolute/path/to/libraries 选项来设置运行时库的搜索路径。这可以通过在 configure 脚本中设置 LDFLAGS 或在 Makefile 中修改链接命令来实现。然而,这并不会改变库文件中记录的路径,但会影响运行时库文件的搜索。

结论

改变已安装动态库文件的链接路径通常是通过 install_name_tool 完成的。其他方法,如修改 Makefile 或使用 rpath,通常用于控制运行时库的搜索路径,而不是直接修改库文件中的链接路径。如果你需要在多个位置部署 ICU,并且希望保持链接路径的一致性,考虑使用相对路径或符号链接可能是更好的选择。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏