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  

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

      

  • 相关阅读:
    202011051 每周例行报告
    202011261 每周例行报告
    202010153 每周例行报告
    keil代码定位
    VC2008创建MFC工程遇到的问题及解决方法
    面朝大海, 春暖花
    Oracle10G数据库教程
    郁闷来了
    MPEG4与.mp4
    vs2003 使用ffmpeg,sdl时的编译问题
  • 原文地址:https://www.cnblogs.com/cocoajin/p/10904646.html
Copyright © 2011-2022 走看看