例如我有个golang项目ucp, 项目目录如下
.
├── README.md
├── a.out
├── client.json
├── cmd.sh
├── dist
│ ├── libmudp.a
│ ├── libucp.h
│ ├── mudp.c
│ └── mudp.h
├── main.go
├── server.json
└── tests
└── ucp_test
└── main.c
终端命令行进入ucp项目目录,输入如下命令
go build -buildmode=c-archive -o dist/libucp.a
在dist目录得到静态库libucp.a和libucp.h
c使用go静态库直接使用
gcc -o a.out tests/ucp_test/main.c dist/libucp.a
间接引用
mudp.c mudp.h引用go库后, main.c间接引用
go build -buildmode=c-archive -o dist/libucp.a
cd dist
gcc -c mudp.c -o mudp.o
ar -crs libmudp.a mudp.o #归档成.a静态库
cd ..
gcc -o a.out tests/ucp_test/main.c -Ldist -lmudp -lucp
c编译进一个独立的静态库
编译可执行程序时只用依赖一个静态库
ar -xs libucp.a #拆解静态库成.o中间文件
ar -rcs libmudp.a *.o #归档成.a静态库
rm *.o libucp.a '__.SYMDEF SORTED' #删除中间文件
cd ..
gcc -o a.out tests/ucp_test/main.c -Ldist -lmudp
接下来直接执行就好了
./a.out
参考
静态库和动态库
将代码及依赖的静态库编译为新静态库
动态库(.so)链接静态库(.a)