我需要使用gcc为RHEL4构建一个wget不完整的可执行文件,它将使用特定的OpenSSL共享库。 LD_LIBRARY_PATH在构建时未设置。
通过指定以下内容非常简单:
LDFLAGS="-W1,-rpath=/usr/local/ssl/lib -L/my_build_dir/usr/local/ssl/lib"
一切都很好。
但这会使RPATH成为我不完整的可执行文件的动态部分:
Library rpath: [/usr/local/ssl/lib:/my_build_dir/usr/local/ssl/lib]
是否可以使用gcc工具链将RPATH设置为仅使用-rpath选项指定的内容并忽略在构建时声明的所有库路径?
我今天看过很多SO帖子,包括:
I don't understand -Wl,-rpath -Wl,,和 What's the difference between -rpath and -L?
但似乎没有解决从最终不完整的可执行文件中删除构建信息的问题。
编辑:以下是最终链接阶段的完整命令行。
gcc -Wall -std=c99 -m32 -march=athlon -mfpmath=sse -msse2 -O2 -pipe -s \
-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -m32 -march=athlon \
-mfpmath=sse -msse2 -O2 -pipe -s -Wl,-rpath,/usr/local/ssl/lib \
-L/my_build_dir/usr/local/ssl/lib -o wget cmpt.o connect.o convert.o \
cookies.o ftp.o css_.o css-url.o ftp-basic.o ftp-ls.o hash.o host.o \
html-parse.o html-url.o http.o init.o log.o main.o netrc.o progress.o \
ptimer.o recur.o res.o retr.o spider.o url.o warc.o utils.o exits.o
build_info.o iri.o version.o ftp-opie.o openssl.o http-ntlm.o \
../lib/libgnu.a /my_build_dir/usr/local/ssl/lib/libssl.so \
/my_build_dir/usr/local/ssl/lib/libcrypto.so -Wl,-rpath \
-Wl,/my_build_dir/usr/local/ssl/lib -ldl -lz -lidn -luuid -lrt
感谢下面的nos和keltar的评论,我可以看到问题所在。
现在找出为什么configure完成指定两个openssl libs及其完整路径。
编辑2:只是为了确认-rpath和-L选项是否正常工作。
如果我重写上面的命令来删除对openssl libs的构建位置的硬引用,那么不完整的可执行文件中的RPATH将被设置为/ usr / local / ssl / lib。
完整编辑的命令是:
gcc -Wall -std=c99 -m32 -march=athlon -mfpmath=sse -msse2 -O2 -pipe -s \
-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -Wall -m32 -march=athlon \
-mfpmath=sse -msse2 -O2 -pipe -s -Wl,-rpath,/usr/local/ssl/lib \
-L/my_build_dir/usr/local/ssl/lib -o wget cmpt.o connect.o convert.o \
cookies.o ftp.o css_.o css-url.o ftp-basic.o ftp-ls.o hash.o host.o \
html-parse.o html-url.o http.o init.o log.o main.o netrc.o progress.o \
ptimer.o recur.o res.o retr.o spider.o url.o warc.o utils.o exits.o \
build_info.o iri.o version.o ftp-opie.o openssl.o http-ntlm.o \
../lib/libgnu.a -lssl -lcrypto -ldl -lz -lidn -luuid -lrt