c++动态库在abi兼容方面臭名昭著,这里结合一个线上模块使用动态库导致出core的问题总结下动态库、虚函数表等知识,这里将线上遇到的问题抽象出一个极简的例子,三个文件include.h, main.cpp, func.cpp ,先上源码
include.h:
class Base {
public:
void virtual func1() = 0;
};
class Wrapper {
public:
Base *b;
};
extern void jj(Wrapper *);
main.cpp:
#include "include.h"
#include <iostream>
using namespace std;
class Derived : public Base {
public:
virtual void func1();
};
void Derived::func1() {
cout << "func1" << endl;
}
int main() {
Wrapper *w = new Wrapper;
w->b = new Derived;
jj(w);
return 0;
}
func.cpp:
#include "include.h"
void jj(Wrapper *w) {
w->b->func1();
}
这里main.cpp是主模块,func.cpp是动态库模块,编译指令如下:
g++