C++共享库链接出现undefined reference、DSO missing报错如何解决?
问题原因
- 自定义库与系统库重名冲突:你将自己实现的库命名为
libc.so,与系统标准C库的文件名完全一致。链接时-lc参数会优先匹配系统标准C库,你自己编写的包含kk()函数的库完全没有被正常链接,这也是你调整-lc参数后报错无变化的核心原因,同时命名冲突还导致链接器加载系统libc的逻辑异常,才触发了__libc_start_main符号缺失的报错。 - 共享库依赖未显式声明:编译生成
libb.so时,没有显式链接它依赖的自定义C库,不符合现代ld链接器的DSO链接规则,也会触发符号缺失报错。
解决方法
- 重命名自定义库,避免和系统库重名,比如将你的C逻辑对应的库命名为
libmyc.so - 按如下流程重新编译:
- 编译自定义C库:
g++ -fPIC -shared c.cpp -o libmyc.so - 编译B库时显式链接依赖的自定义C库:
g++ -fPIC -shared b.cpp -o libb.so -L. -lmyc - 编译生成最终可执行文件:
g++ a.cpp -o a -L. -lb -lmyc
- 编译自定义C库:
- 运行时需要将当前目录加入动态库搜索路径,执行命令为:
LD_LIBRARY_PATH=. ./a
内容的提问来源于stack exchange,提问作者caiyi.zcy
相关产品推荐
相关产品推荐

