./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 文件之类的方法来让其修改为引用绝对路径?
在编译 ICU(International Components for Unicode)时,默认情况下,动态库(如 .dylib
文件在 macOS 上)的链接路径通常是相对路径,这是因为 ICU 的配置和构建系统默认使用这种方式来管理库文件的位置。如果你希望修改这些库文件以使用绝对路径,你可以通过几种方式来实现:
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
来确认实际的依赖路径。
LDFLAGS
和 CPPFLAGS
在编译过程中,你可以通过设置 LDFLAGS
和 CPPFLAGS
环境变量来指定额外的链接和预处理选项。然而,这些变量通常用于指定额外的库路径或定义宏,而不是直接修改链接后的动态库路径。但是,它们可以帮助确保在编译时找到正确的库文件。
Makefile
或构建脚本如果你熟悉 ICU 的构建系统,你可以尝试修改 Makefile
或相关的构建脚本来改变库文件的链接路径。这通常涉及到修改 LDFLAGS
变量,使其包含 -Wl,-rpath,/path/to/libraries
选项,但这通常只影响运行时库的搜索路径,而不是库文件中的实际链接路径。
rpath
在链接时,你可以使用 -Wl,-rpath,/absolute/path/to/libraries
选项来设置运行时库的搜索路径。这可以通过在 configure
脚本中设置 LDFLAGS
或在 Makefile
中修改链接命令来实现。然而,这并不会改变库文件中记录的路径,但会影响运行时库文件的搜索。
改变已安装动态库文件的链接路径通常是通过 install_name_tool
完成的。其他方法,如修改 Makefile
或使用 rpath
,通常用于控制运行时库的搜索路径,而不是直接修改库文件中的链接路径。如果你需要在多个位置部署 ICU,并且希望保持链接路径的一致性,考虑使用相对路径或符号链接可能是更好的选择。
目前,我正在尝试使用FCM,但在编译依赖文件时遇到了一个问题。它给出了一个错误,如Under Gradle(模块:app): 错误 请告诉我它无法成功编译的原因。
我正在使用mongodb和Spring Boot。最近,我的mongodb升级到了3.0版本。 我对Spring使用以下Gradle依赖项: 如果我查看maven存储库中的gradle:,我会看到以下内容(http://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-mongodb/1.2.6
问题内容: 我了解运行时和编译时之间的区别以及如何区分两者,但是我只是看不到需要区分编译时和运行时 依赖项 。 我正在cho的是:程序如何在运行时 不依赖 编译期间 依赖 的东西?如果我的Java应用程序使用log4j,则它需要log4j.jar文件才能进行编译(我的代码与log4j集成并从其中调用成员方法)以及运行时(我的代码绝对无法控制log4j内的代码一旦发生了什么.jar已运行)。 我正在
我正在学习OSGi框架。我发现捆绑包由。类文件和清单文件。现在假设我有两个包A和B,包B依赖于包A的服务。因此,在编译bundle B时,我必须将Bundle A的服务类保存在bundle B的类路径中,或者必须将它(Bundle A的服务)保存在bundle B中,以便编译器可以编译。现在,如果我们这样做,那么模块化是如何实现的,以及这两个包是如何独立的。请帮帮忙。谢谢
问题内容: 是否可以在Gradle(在Android Studio中)中指定对当前项目边界之外的另一个gradle项目的依赖关系?例如,相对路径如下所示: 所以我想的是这样的: 我有一个Android应用程序。结构如下: MyApp(路径为/ Users / foo / workspace / MyApp) 应用程序(路径为/ Users / foo / workspace / MyApp / a