go編譯靜態庫
例如我有個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