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;
}