gpt4 book ai didi

c - 与 ld/gcc 链接不会产生相同的结果(错误/成功)

转载 作者:太空宇宙 更新时间:2023-11-04 08:42:25 26 4
gpt4 key购买 nike

我有一个问题,编译后我不想使用 ld 链接但是当我这样做时我得到一个错误让我们看看我做了什么:

make i386
gcc -g -c -I. -I/usr/include -o p_test.o.i386 pkcs11test.c
ld -o p_test.i386 p_test.o.i386 -g -ldl
ld: p_test.o.i386: référence au symbole non défini «fflush@@GLIBC_2.0»
//lib/i386-linux-gnu/libc.so.6: error adding symbols: DSO missing from command line
make: *** [i386_p_test] Erreur 1

所以使用 ld 我得到了这个错误但是当我尝试使用 gcc 时

make i386
gcc -g -c -I. -I/usr/include -o p_test.o.i386 pkcs11test.c
gcc -o p_test.i386 p_test.o.i386 -g -ldl

我没有错误和我的可执行文件

你知道我如何使用 ld 来链接我的程序吗?

谢谢!

最佳答案

当您使用 gcc -o p_test.i386 p_test.o.i386 -g -ldl 启动 gcc 时,它实际上向 ld 命令添加了很多内部库。您可以通过向 gcc 添加 -v 选项来查看所有参数。 “内部库”之一是 glibc 本身 (-lc)。

例如这里GCC verbose mode output explanation我们可以看到用于链接可执行文件的 collect2 程序。运行中添加了 -lgcc -lgcc_eh -lc -lgcc -lgcc_eh 库,并且也链接了几个 CRT 运行时对象:

/usr/lib/gcc-lib/i686/3.3.1/collect2
--eh-frame-hdr -m elf_i386 -dynamic-linker
/lib/ld-linux.so.2 /usr/lib/crt1.o /usr/lib/crti.o
/usr/lib/gcc-lib/i686/3.3.1/crtbegin.o
-L/usr/lib/gcc-lib/i686/3.3.1
-L/usr/lib/gcc-lib/i686/3.3.1/../../..
/tmp/ccQynbTm.o # << this is input file.
-lgcc -lgcc_eh -lc -lgcc -lgcc_eh
/usr/lib/gcc-lib/i686/3.3.1/crtend.o
/usr/lib/crtn.o

PS:我觉得最好不要更改文件扩展名(后缀)。您的 p_test.o.i386 可以重命名为 p_test.i386.o

关于c - 与 ld/gcc 链接不会产生相同的结果(错误/成功),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23061640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com