常用选项:
#编译链接
gcc main.c -o main
#只编译不链接,生成main.o文件,可以再执行gcc main.o -o main 链接,效果和上面一样
gcc -c main.c
#预编译
gcc -E main.c
#只编译不汇编,生成main.s汇编代码文件
gcc -S mian.c
#生成带调试信息的版本main_d
gcc -g main.c -o main_d
#指定头文件路径(-I..)
gcc main.c -o main -I../../include
#多文件编译
gcc main.c test.c -o main
静态编译:把所有用到的库文件编译到可执行文件中。
- 编译时间长,文件大,一般不用,好处是运行时不依赖环境。
- 不加-static默认使用动态编译。
gcc main.c -o main -static
动态库的编译和使用:
现有一个Dog类,需要编译成动态库:
# g++ 和gcc用法一样
# -fpic 表示位置无关码
# -shared表示生成动态库
# libDog.so是生成的动态库名 要求为libxxx.so
g++ Dog.cpp -fpic -shared -o libDog.so
使用时:
假设Dog.h和生成的libDog.so 都在目录…/dog
# -I指定头文件路径
# -L指定库路径
# -l指定库名字(不用全称 libDog.so)
g++ main.cpp -o main -I../dog -L../dog -lDog
main.cpp要#include Dog.h (和正常使用一样)
除此之外,执行生成的main文件时还需要指定库路径
可用下面的方式导出到系统LIBRARY_PATH下
可以写个脚本来执行,如下:
export LD_LIBRARY_PATH=../dog
./main