但当遇到代码文件中遇到数学函数时,在编译/链接时需要在gcc后面添加链接参数-lm,而它的位置却不能随意指定。 仅有最后两条是有效编译命令(即只能够把链接参数放在命令末尾)
例子:整个源代码程序由两个文件 testmain.c 和 testsub.c 组成,程序中使用了系统提供的数学库(所有与浮点相关的数学运算都必须使用数学库)。 gcc testmain.c testsub.c-lm-o test 其中,-lm 表示链接系统的数学库 libm.a。 说明: 在编译一个包含许多源文件的工程时,若只用一条gcc命令来完成编译是非常浪费...
11. -L directory:指定库文件的路径,可以使用多个-L选项来指定多个路径。12. -l library:链接指定的库文件,例如-lm表示链接数学库。13. -D macro:定义一个宏,可以使用-D选项定义多个宏。14. -U macro:取消一个宏的定义。15. -pedantic:严格按照标准执行,当代码使用了标准不允许的特性时给出警告。16...
-l:链接指定的库。例如,-lm表示链接数学库。 -o:指定输出的可执行文件名。如果不指定,默认输出为a.out(在早期版本的GCC中)或a.exe(在某些平台上)。 -static:生成静态链接的可执行文件,不依赖动态链接库。 -shared:生成动态链接的可执行文件,依赖动态链接库。 -pthread:为程序添加线程支持。 -fPIC:生成位置无...
找到后,只要gcc的-l参数后面加上上图中lib后面的那个字母即可,中m表示库名,2.17是版本。所以gcc上加-lm进行链接 Ubuntu64位使用: nm -Do /lib/x86_64-linux-gnu/*.so|grep sqrt 1. 因为Ubuntu的动态库是在 /lib/x86_64-linux-gnu 下,而centos是在 /lib64/下。
例如,-lm表示链接数学库。 -static:生成静态链接的可执行文件。这意味着所有依赖的库都将被包含在可执行文件中,而不是在运行时动态加载。 -shared:生成共享库(动态链接库)。 -fPIC:生成位置无关代码(Position Independent Code),通常用于生成共享库。 -D:定义宏。例如,-DDEBUG将定义名为DEBUG的宏。 这些选项...
报错的是ld阶段,表示链接失败,找不到squr函数,根本原因是找不到libm.so。跟math.h头文件没有任何关系,头文件有问题的话在预处理阶段编译之前就会报错了。你的-lm估计加的地方不对,要确保在链接阶段添加,不是编译的时候。是
使用-l参数可以链接指定的库文件,其中库文件名称可以省略前缀"lib"和文件扩展名,例如-lm表示链接数学库。 10. -D<macro_name>=<value>:定义预处理宏。通过使用-D参数,可以在编译过程中定义一个预处理宏,并可选地为其指定一个值。例如,使用-DDEBUG来定义名为DEBUG的宏。 以上只是GCC的一些常用参数,还有很多...
使用该参数可以告诉编译器链接指定的库文件,例如-lm表示链接数学库。 10. -D <macro> 定义宏。使用该参数可以在编译过程中定义宏,以控制源代码中的条件编译。 三、高级参数 1. -Werror 将警告视为错误。使用该参数可以将编译过程中的警告信息视为错误,编译过程将被中断。 2. -std=<standard> 指定所使用的...
的库. 就只好用 nm -o /lib/*.so|grep sin>;~/sin 命令,然后看~/sin 文件,到那里面去找了. 在sin 文件当中,我会找到 这样的一行libm-2.1.2.so:00009fa0 W sin 这样我就知道了sin 在libm-2.1.2.so 库里面,我用 -lm 选项就可以了(去掉前面的lib 和后面的版本标志,就剩下m 了所以是 -lm)...