问题产生原因
我们都知道我们写一个程序不可能所有东西都重头去开发,因此我们会使用一些其它人写好的文件或者说叫做库函数等。但是有时候因为路径的设置不对,或者是文件的丢失,或者是文件版本不对,或者是文件的编码不对,都可能导致我们无法编译成功。
c语言编译过程
预处理生成.i文件。
生成汇编语言.s文件
生成机器码.o文件
链接机器代码生成可执行文件
gcc编译参数说明
了解了c语言的编译过程,我们就来介绍gcc的各个参数,来分别对照各个步骤。
gcc -E main.c -o main.i(进行预处理 .i文件)
gcc -S main.i -o main.s (生成汇编代码.s文件)
gcc -c main.s -o main.o (生成机器码.o文件)
gcc main.o -o main.exe (生成可执行文件windows)
各个过程图片如下:
当然了,平时我们写程序的时候不需要这么复杂的过程,我们可以直接一步编译生成可执行文件
gcc main.c -o main.exe
如果需要调试,我们需要使用-g 选项
编译时需要的一些其它参数
有些时候我们还需要链接一些其它的库文件,这个时候我们可以使用-l选项,比如我们使用SGL图形库的时候,我们可能就需要-lSGL2选项来加载所需要的函数链接库。
解决问题办法
如我们之前所说的一样,我们需要使用-l来加载一些缺少的函数库文件。
头文件找不到的话,我们就指定头文件搜索路径 -I
库文件找不到的话,我们就指定库文件搜索路径 -L
当然我们也可以使用-l(小写L)来指定具体的库文件
在linux上的系统会有LD_LIBRARY_PATH这个环境变量,它里面定义了库文件的路径,如果我们有新的库,可以把它加入到这个环境变量里面。