0

我可以 ssh 到我的学校 Ubuntu 11.04 服务器,我必须在其中提交我的代码,这个链接很好:

ME@SCHOOL:~/309/project2$ make
gcc -lm treesort.c -o treesort
ME@SCHOOL:~/309/project2$

我的本地机器运行的是 Ubuntu 12.04,这是相同代码的编译器输出,但使用的是 NetBeans 生成文件:

gcc -lm    -o dist/Release/GNU-Linux-x86/treesort build/Release/GNU-Linux-x86/sortFns.o build/Release/GNU-Linux-x86/treesort.o  
build/Release/GNU-Linux-x86/treesort.o: In function `processargs':
treesort.c:(.text+0x144): undefined reference to `log'
collect2: ld returned 1 exit status

在我的本地机器上使用与第一个示例相同的代码和 makefile 的命令行:

ME@MYCOMPUTER:~/Documents/CSCI/309/project2$ make
gcc -lm treesort.c -o treesort
/tmp/ccY5GqF1.o: In function `processargs':
treesort.c:(.text+0x2b5): undefined reference to `log'
collect2: ld returned 1 exit status
make: *** [all] Error 1
ME@MYCOMPUTER:~/Documents/CSCI/309/project2$

这真的很烦人,我不明白为什么它在服务器上工作而不是在我的本地机器上工作。我发现了这个问题,但它没有帮助。

4

1 回答 1

1

放在-lm链接行的末尾。链接行上的源、对象和(存档)库的顺序很重要,而您的顺序是错误的。

如果放在-lm链接行的末尾没有帮助,那么您在系统的某个地方调用了一些伪造的库libm.{a,so},您应该弄清楚它来自哪里,然后摆脱它。

您可以找出libm您的链接器正在查找哪个gcc -Wl,-t ...

于 2012-10-07T16:56:38.957 回答