GCC编译时,出现undefined reference to

Sheldon
  • 24

1.在A文件夹下有个文件夹B
2.在B文件夹里生成静态库,假设为ld.a,源代码都是C语言写的
3.在A文件夹里的.CPP文件,引用B文件夹里的源代码的的函数,编译的时候链接上该静态库
4.用g++编译A文件里的代码,但是会出现错误:

    main.cpp:(.text+0x120e): undefined reference to `OpenConf()'

5.查看静态库ld.a的符号,发现OpenConf是存在的

    0000000000000c00   276 FUNC    GLOBAL DEFAULT    1 OpenConf

6.执行命令:objdump -d -r main.o 相关信息:

    120d:    e8 00 00 00 00           callq  1212 <main+0x22e>
    120e: R_X86_64_PLT32    _Z8OpenConfv-0x4

7.执行命令:readelf -r main.o 相关信息:

    00000000120e  00d500000004 R_X86_64_PLT32    0000000000000000 _Z8OpenConfv - 4
    
    

编译的时候,库的链接没有报错,是正确的。现在不知道如何调试,如何去找出错误?

回复
阅读 4.2k
1 个回答

在C++里使用C库的函数时,你加了 extern "C" { } 吗? 否则就会链接找不到。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏