GCC
- 预处理(
.c/.cpp
)、编译()、汇编、链接
使用动态链接库
- 生成.o文件:
arm-linux-gnueabihf-gcc -c -o sub.o sub.c
- 生成动态链接库:
arm-linux-gnueabihf-gcc -shared -o libsub.so sub.o
- 使用动态链接库生成可执行文件:
arm-linux-gnueabihf-gcc -o test main.o -lsub -L ./
- 注意
-l
和sub
之间没有空格 - sub库并没有位于工具链的lib目录,所以我们需要指定目录,
-L ./
指定库所在的目录为当前目录
- 注意
- 注意:使用动态链接库交叉编译生成的可执行程序,传输到板子上时,需要把动态链接库
libusb.so
放到板子对应的/lib
目录- 如果不放到板子对应的/lib目录,则需要重新运行以下程序(放到
/a
目录为例)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/a
然后运行./test
- 如果不放到板子对应的/lib目录,则需要重新运行以下程序(放到
使用静态链接库
- 生成.o文件:
arm-linux-gnueabihf-gcc -c -o sub.o sub.c
- 生成静态链接库:
ar crs libsub.a sub.o
(可以使用多个.o生成静态库) - 使用静态链接库生成可执行文件
rm-linux-gnueabihf-gcc -o test main.o libsub.a
(如果.a不在当`前目录下,需要指定它的绝对或相对路径) - 注意:静态链接库不需要放到板子上!!!
GCC编译一些很有用的选项
gcc -E main.c
// 查看预处理结果,比如头文件是哪个gcc -E -dM main.c > 1.txt
// 把所有的宏展开,存在1.txt里gcc -Wp,-MD,abc.dep -c -o main.o main.c
// 生成依赖文件abc.dep,后面Makefile会用