gcc 编译两个so其中soA依赖soB

有两个so,其中soB中调用soA;

那么我们打包soB的时候连接soA;

在打包test程序的时候连接soB,此时soB会自动查找依赖的soA;

如下测试

在编译之前指定环境变量:export LD_LIBRARY_PATH=./

soA

#include <stdio.h>

int add(int a,int b){
	return (a+b);
}

 编译成so

	gcc -shared -fPIC -o libadd.so add.c

  

soB

#include <stdio.h>

extern int add(int a,int b);

int cal(int a,int b){

	return (add(a,b)+1);

}

  编译成so,编译时连接soA,就是 -ladd

	gcc -shared -fPIC -o libcal.so cal.c -L. -ladd

  

测试程序test.c

#include <stdio.h>


extern int cal(int a,int b);

int main(void)
{
	printf("%d\n",cal(11,10));
	return 0;
}

  编译测试程序,这里我们只是连接了cal,没连接add

	gcc test.c  -o test -L. -lcal

 

最后运行test

 

由于我们前面指定的环境变量,可以这么做,如果不指定环境变量,默认会从系统的库路径下查找,那么找不到so,就无法编译我们的测试程序;

完整的Makefile

all:

	gcc -shared -fPIC -o libadd.so add.c
	gcc -shared -fPIC -o libcal.so cal.c -L. -ladd
	gcc test.c  -o test -L. -lcal


clean:
	rm -rf test
	rm -rf *.so  

 

使用之前要提前设置环境变量;

 

 

  

 

posted @ 2019-05-22 11:02  cocoajin  阅读(1372)  评论(0编辑  收藏  举报