【问题标题】:linking gives me "undefined reference" to for each referred function from libc.so对于 libc.so 中的每个引用函数,链接给了我“未定义的引用”
【发布时间】:2015-02-26 12:29:17
【问题描述】:

这两个问题都没有解决我的问题: glib-undefined-reference-to-anything-from-glibundefined-reference-to-pthread-create

我正在编写来自 glibc-2.21 的 snprintf 函数的个性化版本。当我想链接调用新函数 snpprintf()main.o 时,对于 glibc-2.21 函数的每次调用/引用,我都会从链接器收到数十个 undefined reference to 错误。

这是命令:

ar rvs libFaFsprintf.a snpprintf.o vfpprintf.o vsnpprintf.o iovspprintf.o
gcc main.o libFaFsprintf.a -lc -o main

我在库libFafsprintf.a 中有我的目标文件——我提供库还是指定每个目标文件都没有关系。源代码编译没有任何问题。 我还尝试更改我的图书馆和-lc 的顺序 - 没有任何帮助。

它仅在我使用 -static 选项时有效,但我确实想要将 libc 与可执行文件静态链接。

如何链接程序?

【问题讨论】:

  • 会不会是您的 glib 架构与您的对象的架构不匹配?
  • 当我静态链接它时,它就可以工作了。这意味着到目前为止一切正常。
  • 不,当您静态链接时,您使用的是物理上不同的库。
  • 好的。这我不知道。我的snprintf() 的个性化版本是来自 GNU glib-2.2 包的副本。我将它与 glib-2.0 链接 - 这可能是问题吗?但是为什么它在作为静态链接时起作用。静态链接时如何检查使用了哪个库?
  • 要进行故障排除,1. 使用libglib-2.x.y.so 的完整路径而不是-lglib-2.0。 2.nm <path-to-glib> | grep <undefined-symbol>,你看到了什么?

标签: gcc reference linker undefined glib


【解决方案1】:

如何链接程序?

像这样:

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

【讨论】:

  • 正如用户 nemequ 意识到的那样,我在第一个版本的问题 glib 中与 libc 不匹配。通常我不需要为链接过程提供标准C库
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-20
相关资源
最近更新 更多