elf文件链接两个so时候,同名函数在两个so里面都有

main.cc文件


#include <iostream>

using namespace std;

extern int common_func(int a1, int a2);
extern int old_func(int n);
extern int new_func();

int main() {
        cout << "hello" << endl;

        int n = 1;
        n = common_func(1, 2);
        cout << "common:" << n << endl;

        //n = new_func();
        //cout << n << endl;

        n = old_func(1);        //单独包含new so时候,链接不到这个函数,虽然new里面嵌套了这个函数
        cout << "old_func:" << n << endl;

        return 0;
}

//g++ main.cc -std=c++11 -L. -lold_so -lnew_so -Wl,-rpath,. -g -o exe_two //输出2 2 哪个so在前面,打出来的common_func就是谁,和先后顺序有关
//g++ main.cc -std=c++11 -L. -lnew_so -lold_so  -Wl,-rpath,. -g -o exe_two //输出1 2 哪个so在前面,打出来的common_func就是谁,和先后顺序有关

//g++ -shared -fPIC new_so.cc -L. -lold_so -Wl,-rpath,.  -std=c++11 -g -o libnew_so.so  //编译new so
//g++ main.cc -std=c++11 -L. -lnew_so -Wl,-rpath,. -g -o exe_new        //输出1 链接不到old_func需要注释掉

//g++ -shared -fPIC old_so.cc -std=c++11 -g -o libold_so.so //编译old so
//g++ main.cc -std=c++11 -L. -lold_so -Wl,-rpath,. -g -o exe_old //编译exe_old

//g++ main.cc -std=c++11 //链接会报错

文件old_so.cc

int common_func(int a1, int a2) {
        return 2;
}

int old_func(int n) {
        return n+1;
}

文件new_so.cc

int common_func(int a1, int a2){
        return 1;               
}                               
                                
extern int old_func(int n);     
int new_func(){                 
        int i = 1;              
        i += old_func(i);       
                                
        return i;               
}                 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值