Linux &引用;在创建共享对象时不能使用“;在建造glibc时

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

我正在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/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
并找出答案。