zoukankan      html  css  js  c++  java
  • 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
    ",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  

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

      

  • 相关阅读:
    windows7 下 oracle 10g服务端如何安装?
    DOM模块支持测试
    获取css属性
    在webstorm启动nginx服务器
    获取link链接
    innerText
    外部动态加载javascript
    外部动态加载css
    冒泡排序
    Nodelist
  • 原文地址:https://www.cnblogs.com/cocoajin/p/10904646.html
Copyright © 2011-2022 走看看