我正在尝试在/ usr / local中构建和安装我自己的gcc 4.7.2,以代替/ usr中的gcc 4.4.6 . (这是在CentOS 6.3上 . )
gcc生成可执行文件和动态库,动态链接到自己的动态库,例如: libstdc .so . 如何构建和安装gcc,以便生成的二进制文件自动获得链接器-rpath选项(-rpath / usr / local / lib64),该选项导致/ usr / local / lib64中的动态库链接而不是/ usr /中的动态库lib64或/ lib64?
如果它正常工作,在我使用gcc构建可执行文件而不指定“-Wl,-rpath = / usr / local / lib64”之后,当我查看可执行文件时,它应该显示/ usr / local / lib64 / libstdc .so . 6而不是/ usr / lib64 / libstdc .so.6 . 同样适用于libgcc_s.so.1 .
我尝试过不同的方法,包括在'configure'命令行中指定LDFLAGS_FOR_TARGET = -Wl,-rpath = / usr / local / lib64,-rpath = / usr / local / lib,但没有任何效果 .
1 回答
如果您不想导出路径,则可以使用其他解决方案:
使用
PATH
中的工具链:编辑
specsfile
并在link
部分添加您的-rpath
示例:此时你可以测试它是否适用:
如果它工作,你可以使它永久(不需要每次都传递
-specs
)grep应该显示
gcc
查找默认specs
文件的路径 .specs文件足够灵活,允许根据变量进行条件链接,例如:
应该使用不同的和多个路径,取决于mabi(未经测试),
%R
应该是sysroot
路径,可以用所需的完整路径进行更改 .还有一个
--with-specs=
选项gcc configure最终将在构建时使用,我还不清楚如何使用链接部分(处理它) .它工作,我使用
shared
而不是!shared
只是为了测试,可能应该使用一些更聪明的条件,请注意它不报告-dumpspecs
.通过gcc邮件列表的一些帖子阅读我的印象是
specs
aren 't liked by everyone (but if I' m没有错4.9添加另一个选项--with-extra-specs
)而不是首选方式来做这样的自定义似乎是configure.host
,但我已经完成而没有调查它,玩得开心! :-)另见:gcc faq rpath
update above
我不知道你是否可以设置一个预先定义的
rpath
,可能是因为你可以在binutils
的binutils
链接器ld
中,但你为什么要这样做呢?只需在运行时导出
LD_LIBRARY_PATH
,在构建时导出LD_RUN_PATH
ldd
应显示您导出的路径 .引用使用libtool构建共享库时给出的消息:
for completeness
Makefile
我用来测试的东西,所有的配置选项,环境变量(参见boot ldflags)我试过没用,--enable-rpath
包括在内 .使用
mkdir ~/gcc
将Makefile
复制到~/gcc
然后cd ~/gcc && make build-gcc
notice 使用的选项仅适用于此测试用例,请勿用作参考 .