我目前正在使用gcc进行编译,我需要使用 。 问题是它无法识别库。 我也尝试过
-lm
而且没有。 我试图使用的函数是ceil()
,我得到以下错误:
: undefined reference to `ceil' collect2: ld returned 1 exit status
我正在使用最新的Ubuntu和math.h。 我尝试在不同的计算机上使用-lm
,它完美地工作。
有谁知道如何解决这个问题?
我确实包含了 。 另外,我使用的命令是:
gcc -lm -o fb file.c
获取此代码并将其放在ceil.c
文件中:
#include #include int main(void) { printf("%fn", ceil(1.2)); return 0; }
编译它:
$ gcc -o ceil ceil.c $ gcc -o ceil ceil.c -lm
其中一个应该工作。 如果两者都不起作用,则显示每个编译的完整错误消息。 请注意, -lm
出现在源文件的名称之后(如果在链接之前将源代码编译为对象,则出现在目标文件中)。
没有足够的声誉评论@Jonathan Leffler的回答。 只是想提一下Peter van der Linden的书“ 专家C编程”在第5章“链接思考”中对这个主题有一个很好的处理。
归档(静态库)的作用与共享对象(动态库)不同。 对于动态库,所有库符号都会进入输出文件的虚拟地址空间,并且所有符号都可用于链接中的所有其他文件。 相反,静态链接仅通过存档查找存档处理时加载程序当前已知的未定义符号。
如果在目标文件之前指定数学库(通常是静态数学库),则链接器将不添加任何符号。
尝试编译:
gcc -Wall -g file.c -lm -o file
我有同样的问题,使用此命令解决了。 此外,如果您在遇到问题的同一天安装了Ubuntu,则可能是更新问题。
以上就是c/c++开发分享与gcc和-lm链接并没有在Ubuntu上定义ceil()相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/578357.html