天天看点

linux下生成.so文件和.a文件linux下生成.so文件和.a文件

原文链接:http://www.cnblogs.com/tzhangofseu/archive/2011/11/15/2249585.html

linux下生成.so文件和.a文件

test.h

linux下生成.so文件和.a文件linux下生成.so文件和.a文件
1 #ifndef _TEST_H_
2 #define _TEST_H_
3 
4 void TestA();
5 void TestB();
6 
7 #endif      
linux下生成.so文件和.a文件linux下生成.so文件和.a文件

test_a.cpp

linux下生成.so文件和.a文件linux下生成.so文件和.a文件
1 #include <stdio.h>
2 #include "test.h"
3 
4 void TestA()
5 {
6     printf("TestA func\n");
7 }      
linux下生成.so文件和.a文件linux下生成.so文件和.a文件

test_b.cpp

linux下生成.so文件和.a文件linux下生成.so文件和.a文件
1 #include <stdio.h>
2 #include "test.h"
3 
4 void TestB()
5 {
6     printf("TestB func\n");
7 }      
linux下生成.so文件和.a文件linux下生成.so文件和.a文件

生成so文件的命令

g++ test_a.cpp test_b.cpp -fPIC -shared -o libtest.so      

生成.a文件的命令

1 gcc -c test_a.cpp
2 gcc -c test_b.cpp
3 ar -r libtest.a test_a.o test_b.o      

test.cpp

linux下生成.so文件和.a文件linux下生成.so文件和.a文件
1 #include "test.h"
2 
3 int main()
4 {
5     TestA();
6     TestB();
7 
8     return 0;
9 }      
linux下生成.so文件和.a文件linux下生成.so文件和.a文件

采用动态库编译命令

g++ test.cpp -o test -L. -ltest      

执行

export LD_LIBRARY_PATH=./
./test      

执行结果如下。

linux下生成.so文件和.a文件linux下生成.so文件和.a文件

采用静态库编译命令

g++ -static -o test -L. -ltest test.cpp      

执行效果

linux下生成.so文件和.a文件linux下生成.so文件和.a文件

静态库的嵌套调用,有时候我想做一个自己的静态库,它里面要调用其他静态库里面的函数,经过试验

这个好像用ar -r不行,所以就在链接的时候需要两个库文件都包含,同时要有这一个头文件才行。。。

继续阅读