GCC 常用

记录一些编译遇到的问题。
首先推荐陈皓的《跟我一起写 Makefile》,可以算是启蒙书了,一些参数的含义在这里也可以找到,非常方便。

动态库导入静态库

遇到需要编译一个动态库,但是其中包含两个静态库,怎么样能把他们编译到一起呢?
目标:libmylib.so
源:src1.c src2.c
库:liba.a libb.a
依赖:libmylib.so -> libb.a -> liba.a
目录:

1
2
3
4
5
6
7
.
├── liba
│   └── liba.a
├── libb
│   └── libb.a
├── src1.c
└── src2.c

编译:

1
gcc -fPIC -Wall src1.c src2.c -shared -o libmy.so -Llibb -lb -Lliba -la

说明:

  • -L 后接静态库所在目录位置
  • -l 后接静态库名字,去掉前面的 lib 以及文件类型 .a
  • -Lxxx -lxxx 需要放在最后
  • 两个以上静态库时,被依赖的放在后面,如上 b 依赖 aa 在后

验证:使用以下命令确保未出现静态库中的函数名

1
nm libmylib.so | grep "U "

GCC 常用
https://wishlily.github.io/article/tools/2017/06/15/undefined/
作者
Wishlily
发布于
2017年6月15日
许可协议