我将标题<math.h>
添加到项目中以开始测试fmod函数,该函数返回浮点除法的小数部分。我对此有更多的疑问,但我会将其保存为另一个问题。
所以在添加标题并使用该函数后,没有lint错误消失,然后我尝试构建程序。
我收到此错误:
/usr/bin/ld: CMakeFiles/main.dir/main.c.o: undefined reference to symbol 'fmod@@GLIBC_2.2
.5'
//lib/x86_64-linux-gnu/libm.so.6: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
好的,所以在阅读c错误方面越来越好我注意到ld这意味着链接器,好吧。
接下来我开始使用Google搜索错误,然后找到答案。我需要添加链接器标志-lm
为什么呢?我不知道所以我开始搜索谷歌链接标志的含义,我没有找到任何答案。回到SO并找到this question and answer。
这些是主要问题下的引用。
如果我有一个off文件,那么pkg-config似乎没问题,但如果你收到这些链接器错误就会增加项目,那么就很难弄清楚是什么错误。阅读图书馆文档...... - pmg
...然后谷歌。 - Ori Pessach
链接语义因操作系统和编译器而异。我们需要更多细节才能做出有用的贡献。 - radical7
另一个答案是阅读文档。我回到谷歌并遇到了关于math.h的this documentation
但是它没有说明要使用的实际链接器标志。
所以我的问题是@pmg在他的回复中谈到了什么文件? 什么是在我的系统上找到此文档的一般目的方式,以防我无论出于何种原因无法使用谷歌?特别是因为我的计算机上有文件并能够包含它们。
答案 0 :(得分:1)
好吧,如果您在Google中键入man fmod
(man是UNIX帮助系统),请点击第一个链接,获取有关该功能的文档。这清楚地说明了您必须包含哪些标题以及您必须链接的库:
Synopsis
#include <math.h>
double fmod(double x, double y);
float fmodf(float x, float y);
long double fmodl(long double x, long double y);
Link with -lm.