纠正gcc / ld命令与非标准glibc一起使用,强制使用特定的glibc

时间:2014-07-28 17:21:07

标签: linux gcc glibc

我正试图在Gentoo稳定系统上链接到我的非标准glibc。 “非标准”我指的是主分支中最新的glibc git clone。

我已在单独的构建目录中构建它,没有错误。然后我将它安装到一个单独的目录(由configure命令中的--prefix指定)。

我的configure命令只是./configure --prefix = / new_glibc

然而,问题在于编译/链接。

编译和链接的正确命令是什么?我试图遵循几个指南,包括看似被弃用的http://www.tldp.org/HOWTO/Glibc2-HOWTO-6.html(例如-b似乎不再是一个有效的参数)。

我也尝试过:Building GCC with glibc in a non-standard location without root

~/ $ export LD_LIBRARY_PATH=/new_glibc        
~/ $ gcc -nodefaultlibs -lgcc -I/new_glibc/include test.c
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../lib64/crt1.o: In function `_start':
(.text+0x12): undefined reference to `__libc_csu_fini'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../lib64/crt1.o: In function `_start':
(.text+0x19): undefined reference to `__libc_csu_init'
/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../lib64/crt1.o: In function `_start':
(.text+0x25): undefined reference to `__libc_start_main'
/tmp/ccWPNGYR.o: In function `main':
test.c:(.text+0x1e): undefined reference to `puts'
collect2: error: ld returned 1 exit status

我也尝试过只用-c编译并手动链接:

$ ld -rpath=/new_glibc/lib test.o 
ld: warning: cannot find entry symbol _start; defaulting to 00000000004000e8
test.o: In function `main':
test.c:(.text+0x1e): undefined reference to `puts'

我也尝试用LD_DEBUG = all来调试这个问题,但这非常冗长,很难解释调试消息。例如。这是什么意思(这是我在一个命令中编译和链接gcc的会话,即没有-c,使用上述命令)?

 30508:     file=libc.so.6 [0];  needed by gcc [0]
 30508:     find library=libc.so.6 [0]; searching
 30508:      search path=/new_glibc/tls/x86_64:/new_glibc/tls:/new_glibc/x86_64:/new_glibc          (LD_LIBRARY_PATH)
 30508:       trying file=/new_glibc/tls/x86_64/libc.so.6
 30508:       trying file=/new_glibc/tls/libc.so.6
 30508:       trying file=/new_glibc/x86_64/libc.so.6
 30508:       trying file=/new_glibc/libc.so.6
 30508:      search cache=/etc/ld.so.cache
 30508:       trying file=/lib64/libc.so.6
 30508:
 30508:     file=libc.so.6 [0];  generating link map
 30508:       dynamic: 0x00007fc1cfc15b40  base: 0x00007fc1cf872000   size: 0x00000000003a9c38
 30508:         entry: 0x00007fc1cf896d00  phdr: 0x00007fc1cf872040  phnum:                 11
 30508:
 30508:     checking for version `GLIBC_2.2.5' in file /lib64/libc.so.6 [0] required by file gcc [0]
 30508:     checking for version `GLIBC_2.3.4' in file /lib64/libc.so.6 [0] required by file gcc [0]
 30508:     checking for version `GLIBC_2.3' in file /lib64/ld-linux-x86-64.so.2 [0] required by file /lib64/libc.so.6 [0]
 30508:     checking for version `GLIBC_PRIVATE' in file /lib64/ld-linux-x86-64.so.2 [0] required by file /lib64/libc.so.6 [0]

显然正在查找正确的目录/ new_glibc /但是我没有看到它在/ new_glibc / lib中查找,这当然是它需要的实际库文件的位置。

简而言之,在/ new_glibc下使用glibc进行gcc编译的正确编译命令是什么?

0 个答案:

没有答案