【问题标题】:Cannot get mixed C and Ada program to link with pthread library无法让混合 C 和 Ada 程序与 pthread 库链接
【发布时间】:2016-08-09 20:17:35
【问题描述】:

我正在用 C 语言编写程序。我收到错误消息:

file_name.c:(.text+0x5d): undefined reference to `pthread_create'

当 gcc 将我的 file_name.o 与我的主 ADA 文件链接时,会出现此特定错误。

对于C文件的实际编译,我都试过了:

gcc -c -pthread file_name.c 

还有:

gcc -c file_name.c -lpthread

这些似乎都不起作用。有什么想法吗?

更新: 我没有意识到的一件事是,当结合 C 和 ADA 时,使用 gnatmake 时会包含 C 库。

问题解决了:

 gnatmake ada_file.adb -o -largs c_file.o -lpthread

【问题讨论】:

  • 向我们展示您如何链接代码。
  • gcc -c 进行编译但没有链接。您使用什么命令链接,实际错误发生在哪里?
  • 链接由gnatmake完成。实际的链接部分是使用 gnatmake 标志 -largs 完成的,后跟 file_name.o
  • 更新问题以显示实际的链接行。您需要向其中添加一些内容以使链接器扫描 pthread 库。看来问题出在gnatmake 设施中——它没有链接您需要链接的内容。暗示 GCC 有过错似乎是在误导。
  • 这并没有更新问题:它正在添加另一条评论。请编辑问题以包含相关信息。 gnatmake 是 Gnat 链接器进程吗?如果是这样,您可能需要在 c_file_name.o 参数之后添加 -lpthread。或者您可能需要在gnatmake 上进行 RTFM。 Gnat 是否允许您将 Ada 线程与 POSIX 线程混合使用?

标签: c linux gcc ada gnat


【解决方案1】:

如果您使用-c 开关,您没有链接您的代码。您只是将其编译为目标文件。在这个阶段指定库是没有意义的。您的 -l 参数将被忽略 - 当 -c 存在时,它没有任何效果,也没有任何意义。

这些库应该在链接时提供,即在您将目标文件组合成最终可执行文件时(当然没有-c)。您没有向我们展示该命令行。该链接线正是您必须添加-lpthread 参数的地方。

【讨论】:

  • 我没有包含我的链接代码。我所包含的只是用于编译独立的 C 文件。 gnatmake 是什么链接。
  • @user289882:太好了。但是,正如我上面所说,这条线是无关紧要的。那里没有问题。该行不会产生您引用的错误。该错误是由您的 linking 行产生的。那是您应该指定-lpthread 的地方。而你没有。
  • 好的,我将它添加到 gnatmake 并且它工作了,谢谢。我是使用 ADA 的新手,所以它现在或多或少是一种学习体验。谢谢!
  • @user289882:要记住一件事:它是“Ada”,而不是“ADA”。这不是首字母缩写词,而是以一个人的名字命名的。
  • 我说 ADA 而不是 Ada,因为我从事的公司/项目中有一个约定。这纯粹是出于习惯。我知道这不是首字母缩写词。
猜你喜欢
  • 2013-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多