Gcc 链接给了我”的感觉;“未定义引用”;对于libc.so中的每个引用函数

Gcc 链接给了我”的感觉;“未定义引用”;对于libc.so中的每个引用函数,gcc,reference,linker,undefined,glib,Gcc,Reference,Linker,Undefined,Glib,这两个问题并没有解决我的问题: 和 我正在编写glibc-2.21中的snprintf函数的个性化版本。当我想链接正在调用新函数的snpprintf()的main.o时,每次调用/引用glibc-2.21函数,我都会从链接器收到几十个未定义的错误引用 这是命令: ar rvs libFaFsprintf.a snpprintf.o vfpprintf.o vsnpprintf.o iovspprintf.o gcc main.o libFaFsprintf.a -lc -o main 我在库

这两个问题并没有解决我的问题: 和

我正在编写glibc-2.21中的
snprintf
函数的个性化版本。当我想链接正在调用新函数的
snpprintf()
main.o
时,每次调用/引用glibc-2.21函数,我都会从链接器收到几十个
未定义的
错误引用

这是命令:

ar rvs libFaFsprintf.a snpprintf.o vfpprintf.o vsnpprintf.o iovspprintf.o
gcc main.o libFaFsprintf.a -lc -o main
我在库
libFafsprintf.a
中有我的对象文件-无论我是提供库还是指定每个对象文件。源代码编译时没有任何问题。 我还试图更改我的库的顺序,但没有任何帮助

它只在我使用
-static
选项时起作用,但我不想将libc静态链接到可执行文件

我必须如何链接程序

我必须如何链接程序

像这样:

gcc main.o libFaFsprintf.a -lglib-2.0 -o main

可能是您的glib架构与您的对象不匹配吗?当我静态链接它时,它就工作了。这意味着远的一切都是好的。不,当你静态链接时,你使用的是一个物理上不同的库。好的。这我不知道。我个人版的
snprintf()
是GNU glib-2.2软件包的副本。我把它和glib-2.0联系在一起——这会是问题吗?但为什么它作为静态链接时工作。如何检查静态链接时使用的库?要进行故障排除,请参见1。使用
libglib-2.x.y.so
的完整路径,而不是
-lglib-2.0
。2.
nm | grep
,你看到了什么?正如用户nemeq意识到的,我在问题glib的第1个版本中与libc不匹配。通常我不需要为链接过程提供标准C库