gcc 的-lm选项是什么意思?
各位好初学linux和gcc,C代码调用math.h中的函数有问题,如sqrt函数。若如sqrt(3.0)则可以编译通过并运行正常,若如sqrt(n),这里n是定义好的double型变量,则不能编译通过,错误信息为:undefined reference to `sqrt'。
上网查到加"-lm",在编译时候果然通过了。请问-lm是什么选项?有没有类似的功能?
gcc的手册太长啦,大致看看也没找到这个。
谢谢各位 编译的时候,链接 数学库, -lptread 链接线程库等等,有好多,可以使自己编译的库 RqSHg 发表于 2013-01-24 21:07 static/image/common/back.gif
gcc的手册太长啦,大致看看也没找到这个。
你应该搜索以 -l 打头的选项。 RqSHg 发表于 2013-01-24 21:07 static/image/common/back.gif
初学linux和gcc,C代码调用math.h中的函数有问题,如sqrt函数。若如sqrt(3.0)则可以编译通过并运行正常,若如sqrt(n),这里n是定义好的double型变量,则不能编译通过,错误信息为:undefined reference to `sqrt'。
像 sqrt(3.0); 这种调用,gcc 在编译时就可以将其替换为对应的值(gcc 优化的一部分),从而不需要链接 sqrt 所在的数学库 libm;而像 sqrt(n); 这种调用,一般无法做这种替换,因此需要链接 libm。 回复 4# MMMIX
谢谢回复,原来gcc编译时还有这样的功能
我查了手册,有这样的描述:
"-llibrary
连接名为library的库文件.
连接器在标准搜索目录中寻找这个库文件,库文件的真正名字是`liblibrary.a'.连接器会 当做
文件名得到准确说明一样引用这个文件."
是不是这个?
我目前简单理解就是,-l后面跟什么,就是链接什么库
楼上说还有-lpthread 是不是还有-llibc++?
但我用的数学库是math.h啊,为什么只写-lm就知道是数学库?简写?
还有上面说的那个'liblibrary.a'又是什么? RqSHg 发表于 2013-01-26 11:55 static/image/common/back.gif
谢谢回复,原来gcc编译时还有这样的功能
我查了手册,有这样的描述:
"-llibrary
连接名为library的库文件.
连接器在标准搜索目录中寻找这个库文件,库文件的真正名字是`liblibrary.a'.连接器会 当做
文件名得到准确说明一样引用这个文件."
是不是这个?
是的。
我目前简单理解就是,-l后面跟什么,就是链接什么库
是的。
楼上说还有-lpthread 是不是还有-llibc++?
libstdc++.so 也是有的,但用 g++ 編譯 C++ 代碼時,會自動鏈接這個庫,就如用 gcc 編譯 C 代碼時會自動鏈接 libc.so 一樣。
但我用的数学库是math.h啊,为什么只写-lm就知道是数学库?简写?
數學庫的實現位於 libm.so 中,鏈接它只需寫 -lm 即可。
还有上面说的那个'liblibrary.a'又是什么?
在 -llibrary 中,library 是庫的名子(這就是個例子),對應的庫文件是 liblibrary.so (動態庫)或 liblibrary.a (靜態庫)。 -l specifies the library you want use
m for libm.so / libm.a
abc for libabc.so / libabc.a
大概是这样吧:D 啊,谢谢各位,这回挺清楚了
到这里,下面打算学学静态与动态链接库的相关内容
有不会的再来问
页:
[1]