解决***.so: undefined symbol:XXX的问题

本文分享了在编译C++代码为.so文件时遇到undefined symbol错误的解决过程。作者发现错误源于未在.cpp文件中初始化类中的static型变量,通过正确初始化解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自己写的代码,编译成.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.soc++filt <symble>查看,发现果然是自己的代码有问题。

我在类中定义了static型变量,而没有在.cpp中对其初始化!

低级啊!应该是想这样:

//A.h

class A

{

public:

……

private:

static int id;

}

//A.cpp

int A::id = 0;

……

为什么编译时不说捏~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值