C:floor的引用未定义

4
我正在Ubuntu上使用Eclipse来编写/编译/运行C代码。 我正在尝试构建我的项目。 以下是在Eclipse控制台中的输出。
22:18:31 **** Build of configuration Debug for project Project1 ****
make all 
Building file: ../project1.c
Invoking: GCC C Compiler
gcc -I/lib/i386-linux-gnu -O0 -g3 -Wall -c -fmessage-length=0 -pthread -lm -MMD -MP -MF"project1.d" -MT"project1.d" -o "project1.o" "../project1.c"
../project1.c: In function ‘main’:
../project1.c:146:6: warning: unused variable ‘this_thread_id’ [-Wunused-variable]
../project1.c: In function ‘_pre_init’:
../project1.c:126:1: warning: control reaches end of non-void function [-Wreturn-type]
Finished building: ../project1.c

Building file: ../scheduler.c
Invoking: GCC C Compiler
gcc -I/lib/i386-linux-gnu -O0 -g3 -Wall -c -fmessage-length=0 -pthread -lm -MMD -MP -MF"scheduler.d" -MT"scheduler.d" -o "scheduler.o" "../scheduler.c"
Finished building: ../scheduler.c

Building target: Project1
Invoking: GCC C Linker
gcc -L/lib/i386-linux-gnu -lm -pthread -o "Project1"  ./project1.o ./scheduler.o   
./project1.o: In function `advance_global_time':
/home/akshay/Cworkspace/Project1/Debug/../project1.c:50: undefined reference to `floor'
collect2: ld returned 1 exit status
make: *** [Project1] Error 1

可以有人帮我弄清楚问题是什么,以及如何解决吗?

3
你是如何添加数学库的?可以参考我之前的回答来进行可能的解决方案。链接在这里:https://dev59.com/SGYr5IYBdhLWcg3wTYgQ#13784484 - Some programmer dude
可能是undefined reference to 'pthread_create'的重复问题。 - Jonathan Leffler
3个回答

6

在目标文件后面链接库。

您有:

gcc -L/lib/i386-linux-gnu -lm -pthread -o "Project1"  ./project1.o ./scheduler.o   

你需要:

gcc -L/lib/i386-linux-gnu -pthread -o "Project1"  ./project1.o ./scheduler.o -lm 

似乎链接器的工作方式发生了变化——在某些时候,可以在目标文件之前指定共享库(例如数学库),并且一切正常。然而,现在如果扫描共享库时它没有满足任何符号,它将被省略在链接过程中。确保目标文件在库之前列出即可解决这个问题。
另请参见Undefined reference to 'pthread_create';同样的问题,同样的解决方案。我怀疑这不是SO上唯一的这类问题。

2
您需要链接数学库,即在链接行末添加-lm。不知道如何在Eclipse中实现,抱歉。

2
注意,你输出的连接标志看起来顺序不对。也许你尝试通过Eclipse中的链接器标志添加-lm。这会在Eclipse中引发问题。我建议你尝试...

右键单击项目 -> 属性 -> C/C++构建 -> 设置 -> GCC链接器 -> 库 -> 添加“m” -> 应用 -> 构建

或者,至少确保-L和-l参数在链接过程中出现在.o文件之后。
我今天刚碰到这个问题,它困扰了我一段时间。

右键单击您的项目 -> 属性 -> C/C++构建 -> 设置 -> GCC链接器 -> 库 -> 添加“m” -> 应用 -> 构建 工作了。非常感谢! - Akshay7589

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接