与自定义 libc 链接后出现段错误
segfault after linking with custom libc
我正在尝试使用调试符号编译 glibc 并将其用于小型应用程序。所以我下载了 glibc,编译没有问题,安装在 /custobuilds 中,现在我正在编译我自己的应用程序:
/usr/bin/c++ -g -Wall -nostartfiles -nodefaultlibs -Wl,--dynamic-linker=/custobuilds/lib/ld-2.27.so -o CMakeFiles/annotation.dir/annotation.o -c annotation.cpp
/usr/bin/c++ -g -Wall -nostartfiles -nodefaultlibs -Wl,--dynamic-linker=/custobuilds/lib/ld-2.27.so CMakeFiles/annotation.dir/annotation.o /custobuilds/lib/crt1.o /custobuilds/lib/crti.o -o annotation -L/custobuilds/lib -rdynamic -lc -Wl,-rpath,/custobuilds/lib
事物链接正确:
zhani@zhani-Aspire-E1-571G:~/Thesis/test/build$ LD_TRACE_LOADED_OBJECTS=1 ./annotation
linux-vdso.so.1 (0x00007ffe8558f000)
libc.so.6 => /custobuilds/lib/libc.so.6 (0x00007f73e02c2000)
/custobuilds/lib/ld-2.27.so (0x00007f73e0677000)
在源代码中我也包含了正确的文件,只有
#include "/custobuilds/include/stdio.h"
我那里只有一个 scanf()/printf()。我已经检查过 gdb,它在到达 main()
之前崩溃了
有什么想法吗?
get linked correctly
不,它没有:您缺少 crtn.o
,并且 link 行上的对象顺序通常应该是:
crt1.o crti.o main.o -lc crtn.o
我正在尝试使用调试符号编译 glibc 并将其用于小型应用程序。所以我下载了 glibc,编译没有问题,安装在 /custobuilds 中,现在我正在编译我自己的应用程序:
/usr/bin/c++ -g -Wall -nostartfiles -nodefaultlibs -Wl,--dynamic-linker=/custobuilds/lib/ld-2.27.so -o CMakeFiles/annotation.dir/annotation.o -c annotation.cpp
/usr/bin/c++ -g -Wall -nostartfiles -nodefaultlibs -Wl,--dynamic-linker=/custobuilds/lib/ld-2.27.so CMakeFiles/annotation.dir/annotation.o /custobuilds/lib/crt1.o /custobuilds/lib/crti.o -o annotation -L/custobuilds/lib -rdynamic -lc -Wl,-rpath,/custobuilds/lib
事物链接正确:
zhani@zhani-Aspire-E1-571G:~/Thesis/test/build$ LD_TRACE_LOADED_OBJECTS=1 ./annotation
linux-vdso.so.1 (0x00007ffe8558f000)
libc.so.6 => /custobuilds/lib/libc.so.6 (0x00007f73e02c2000)
/custobuilds/lib/ld-2.27.so (0x00007f73e0677000)
在源代码中我也包含了正确的文件,只有
#include "/custobuilds/include/stdio.h"
我那里只有一个 scanf()/printf()。我已经检查过 gdb,它在到达 main()
之前崩溃了有什么想法吗?
get linked correctly
不,它没有:您缺少 crtn.o
,并且 link 行上的对象顺序通常应该是:
crt1.o crti.o main.o -lc crtn.o