Linux &引用;在创建共享对象时不能使用“;在建造glibc时
我正在Debian 9.8(x64)上编译glibc 2.19,但是在运行Linux &引用;在创建共享对象时不能使用“;在建造glibc时,linux,gcc,glibc,Linux,Gcc,Glibc,我正在Debian 9.8(x64)上编译glibc 2.19,但是在运行make之后,我遇到了以下错误。如何解决这个问题 gcc -B/usr/bin/ -nostdlib -nostartfiles -o /home/cyril/HME/Multcore_version/AHME/glibc-build/iconv/iconv_prog -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both /home/cyril/HME/Multcor
make
之后,我遇到了以下错误。如何解决这个问题
gcc -B/usr/bin/ -nostdlib -nostartfiles -o /home/cyril/HME/Multcore_version/AHME/glibc-build/iconv/iconv_prog -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both /home/cyril/HME/Multcore_version/AHME/glibc-build/csu/crt1.o /home/cyril/HME/Multcore_version/AHME/glibc-build/csu/crti.o `gcc -B/usr/bin/ --print-file-name=crtbegin.o` /home/cyril/HME/Multcore_version/AHME/glibc-build/iconv/iconv_prog.o /home/cyril/HME/Multcore_version/AHME/glibc-build/iconv/iconv_charmap.o /home/cyril/HME/Multcore_version/AHME/glibc-build/iconv/charmap.o /home/cyril/HME/Multcore_version/AHME/glibc-build/iconv/charmap-dir.o /home/cyril/HME/Multcore_version/AHME/glibc-build/iconv/linereader.o /home/cyril/HME/Multcore_version/AHME/glibc-build/iconv/dummy-repertoire.o /home/cyril/HME/Multcore_version/AHME/glibc-build/iconv/simple-hash.o /home/cyril/HME/Multcore_version/AHME/glibc-build/iconv/xstrdup.o /home/cyril/HME/Multcore_version/AHME/glibc-build/iconv/xmalloc.o -Wl,-dynamic-linker=/lib64/ld-linux-x86-64.so.2 -Wl,-rpath-link=/home/cyril/HME/Multcore_version/AHME/glibc-build:/home/cyril/HME/Multcore_version/AHME/glibc-build/math:/home/cyril/HME/Multcore_version/AHME/glibc-build/elf:/home/cyril/HME/Multcore_version/AHME/glibc-build/dlfcn:/home/cyril/HME/Multcore_version/AHME/glibc-build/nss:/home/cyril/HME/Multcore_version/AHME/glibc-build/nis:/home/cyril/HME/Multcore_version/AHME/glibc-build/rt:/home/cyril/HME/Multcore_version/AHME/glibc-build/resolv:/home/cyril/HME/Multcore_version/AHME/glibc-build/crypt:/home/cyril/HME/Multcore_version/AHME/glibc-build/nptl /home/cyril/HME/Multcore_version/AHME/glibc-build/libc.so.6 /home/cyril/HME/Multcore_version/AHME/glibc-build/libc_nonshared.a -Wl,--as-needed /home/cyril/HME/Multcore_version/AHME/glibc-build/elf/ld.so -Wl,--no-as-needed -lgcc `gcc -B/usr/bin/ --print-file-name=crtend.o` /home/cyril/HME/Multcore_version/AHME/glibc-build/csu/crtn.o
/usr/bin/ld: /home/cyril/HME/Multcore_version/AHME/glibc-build/csu/crt1.o: relocation R_X86_64_32S against symbol `__libc_csu_fini' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/6/crtbegin.o: relocation R_X86_64_32 against hidden symbol `__TMC_END__' can not be used when making a shared object
/usr/bin/ld: final link failed: Nonrepresentable section on output
/usr/bin/ld: /home/cyril/HME/Multcore_version/AHME/glibc-build/csu/crt1.o: relocation R_X86_64_32S against symbol `__libc_csu_fini' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/6/crtbegin.o: relocation R_X86_64_32 against hidden symbol `__TMC_END__' can not be used when making a shared object
/usr/bin/ld: final link failed: Nonrepresentable section on output
collect2: error: ld returned 1 exit status
collect2: error: ld returned 1 exit status
默认情况下,GCC配置为生成位置独立的可执行文件。但是GLIBC-2.19的
Makefile
不适合这种配置
步骤1:验证饼图部分是否正确:
echo "int main() { return 0; }" | gcc -xc - &&
file ./a.out
它应该是“共享库”或“位置独立可执行文件”
步骤2:您可以通过将
-no pie
添加到LDFLAGS
来修复GLIBC-2.19。默认情况下,您的GCC配置为生成位置独立的可执行文件。但是GLIBC-2.19的Makefile
不适合这种配置
步骤1:验证饼图部分是否正确:
echo "int main() { return 0; }" | gcc -xc - &&
file ./a.out
它应该是“共享库”或“位置独立可执行文件”
步骤2:您可以通过将
-no pie
添加到LDFLAGS
来修复GLIBC-2.19。不难想象,5年前的软件版本在更新的操作系统上编译时会遇到问题。你能编译当前的glibc版本吗?@Shawn最新版本的glibc可以编译成功。不难想象,一个5年的软件版本在一个更新的操作系统上可能会有编译困难。你能编译当前的glibc版本吗?@Shawn最新版本的glibc可以编译成功。我添加了LDFLAGS=“$LDFLAGS-在configue
文件的底部没有饼图,错误仍然存在。我是否修改了错误的文件?@L.Ward可能--请查看失败的命令行。它是否有-无馅饼
标志?没有-无馅饼
标志。@L.Ward“没有…”这就是你的答案。你得把它放进去。阅读Makefile
并找出答案。我在configue
文件的底部添加了LDFLAGS=“$LDFLAGS-无饼状图
,错误仍然存在。我是否修改了错误的文件?@L.Ward可能--查看失败的命令行。它是否有-无饼状图
标志?没有-无饼状图
标志。@L.Ward没有…--好吧,这就是你的答案。不知何故,你需要把它放进去。阅读Makefile
并找出答案。