所有
使用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
答案 0 :(得分:1)
感谢sfrehse,JoachimPileborg等人!
事实上,成功取决于争论的顺序。我知道这个事实对于静态链接,但它在使用gcc处理共享对象时是新的。
有人知道改进的背景是什么吗?它打破了无数的构建过程,我想数以千计的番茄正在准备迎接gcc.gnu.org .....
.M