linux编译同时链接静态和动态库
一个测试程序想同时链接静态库和动态库:
dynamic.cpp 动态库代码如下;
#include <iostream>
using namespace std;
int math_sub( int a, int b )
{
return a - b;
}
编译动态库:
g++ -Wall -shared -o ../lib/libdynamic.so.1 dynamic.cpp
成功得到libdynamic.so.1
staticlib.cpp 静态库代码如下:
#include <iostream>
using namespace std;
int math_add( int a, int b )
{
return a + b;
}
编译静态库;
g++ -c -o ../lib/libstatic.o staticlib.cpp
ar -cvp libstatic.a.1 libstatic.o
成功得到libstatic.a.1
main.cpp 调用程序代码如下:
#include <iostream>
using namespace std;
int math_add(int,int);
int math_sub(int,int);
int main( int argv, char** argc )
{
cout<<"now call function in static lib"<<endl;
cout<<"add result:"<<math_add(2,3)<<endl;
cout<<"sub result:"<<math_sub(3,2)<<endl;
}
接下来我们编译main.cpp
g++ -Wall -o main ../lib/libstatic.a.1 ../lib/libdynamic.so.1 main.cpp
结果出错了:
undefined reference to 'math_add(int, int)'
math_add是staticlib.cpp中函数,怎么找不到呢?好,先用:
nm ../lib/libstatic.a.1
查看一下,发现有导出这个函数啊。
我换一个顺序吧:
g++ -Wall -o main main.cpp ../lib/libstatic.a.1 ../lib/libdynamic.so.1
结果成功了。
我百思不得其解,如果有高人路过,请指点。
接下来,我们使用另外一种方式编译:
g++ -Wall -o main main.cpp -L../lib/ -ldynamic -lstatic
结果:
cannot find -ldynamic
这个也是无法解释.