gcc-4.8.2没有链接pthread

时间:2014-11-20 12:58:23

标签: gcc linker pthreads gcc4

所有

使用gcc工具链编写简单的东西好几年了,今天我遇到了一个奇怪的现象。

我将Kubuntu 14.04安装到带有gcc 4.8.2的普通桌面i686机器上。但是,尝试构建从我的本地存储库中提取的一些编码良好的东西,我遇到了大量的'未定义的'消息引用'。代码编译,链接和在Ubuntu 11.04 / gcc 4.5.2下运行良好。  我检查了链接过程(通过-Wl, - 详细到gcc),认为它有效。它找到我在link命令中指定的所有库。 objdump -t myLib.so 带来了我期望的符号 - 但是链接器看不到它们。
  检查pthread库还会带来相应的符号,除了它们后面加上一些 @GLIBC ... 的东西。到目前为止没有检查链接器/加载器技巧。

这样的样本
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

static void *fooo (void *xxx) {
    char *txt = (char*)xxx;
    printf("My job is to print this :'%s'. Bye now!\n", txt);
    return 0;
 }
 int main (int argc, char *argv[]) {
    pthread_t thd;
    pthread_create(&thd,  NULL, fooo,  "A POSIX thread");
    sleep(1);
    return 0;
 }

在旧系统上运行得非常好,只是说

  

gcc -l pthread fooo.c&amp;&amp; ./a.out

但在4.8.2的连接步骤中断开 任何想法都会非常受欢迎。

.M

1 个答案:

答案 0 :(得分:1)

感谢sfrehse,JoachimPileborg等人!

事实上,成功取决于争论的顺序。我知道这个事实对于静态链接,但它在使用gcc处理共享对象时是新的。

有人知道改进的背景是什么吗?它打破了无数的构建过程,我想数以千计的番茄正在准备迎接gcc.gnu.org .....

.M