我正试图在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编译的正确编译命令是什么?