自己写的代码,编译成.so文件
编译可以生成.so,但一运行就报错***.so: undefined symbol:XXX
上网搜,据说可能是因为没加
extern "C"
加了,无效。因为我的.so并没有给.c代码使用。
最初只有一个.cpp时,编译出的.h文件是可以运行的,后来加了一个.h文件,就不行了。 于是查看Make file,怀疑是
***.so:*.o的写法没包含.h
于是将.h中的所有成员实现放到了另一个.cpp文件中,生成yyy.o
编译通过,但运行还是报错。
怀疑是编译环境有问题,于是又把所有的代码一股脑放到原来的.cpp中。
编译通过,但运行还是报错。
继续上网搜,发现https://blog.csdn.net/buknow/article/details/96130049这篇文章。
用 ldd -r xxx.so和c++filt <symble>查看,发现果然是自己的代码有问题。
我在类中定义了static型变量,而没有在.cpp中对其初始化!
低级啊!应该是想这样:
//A.h
class A
{
public:
……
private:
static int id;
}
//A.cpp
int A::id = 0;
……
为什么编译时不说捏~