如何在不包含任何构建路径的情况下设置gcc RPATH?

时间:2014-06-19 18:09:20

标签: c gcc rpath

我需要使用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

0 个答案:

没有答案