gpt4 book ai didi

c - 关于链接数学库的一些问题

转载 作者:行者123 更新时间:2023-11-30 15:58:02 24 4
gpt4 key购买 nike

我正在编写一个 C 项目,该项目必须使用 math.h 中定义的 pow 函数。当我尝试制作该项目时,gcc 给出了以下链接错误:对“pow”的 undefined reference 。

我知道必须将 -lm 选项添加到我的链接指令中,但仍有几个问题令我困惑。

问题1:当我将两个常量传递给pow函数时,没有-lm链接就成功了。为什么?

Q2:-lm 位于链接指令的末尾或开头会产生不同的结果。 gcc -lm $(OBJS) -o exbin 是错误的,但 gcc $(OBJS) -o exbin -lm 是正确的。为什么?

我使用 ubuntu 11.10 和 gcc 4.4.4。

谢谢!请原谅我的台球英语。

最佳答案

编译器了解 pow(3, 4) 或其他内容,并通过在编译时计算结果来优化程序,因此在链接和运行时不需要库。

链接器不会从库中添加内容,除非它知道需要它。对于静态库来说,这是完全正确的。对于共享库,某些版本的编译器会记录所有读取的共享库中的所有符号,即使在扫描库时不需要它们。较新的版本仅在扫描时至少需要其中一个符号时才采用共享库。当库首先出现时,唯一需要的符号是 main() (这就是为什么 main() 被指定为托管环境的起点),因此数学库被忽略,因为其中没有需要的符号。

关于c - 关于链接数学库的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10082815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com