奇怪的错误 - 链接到自己的库gcc时未定义的引用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了奇怪的错误 - 链接到自己的库gcc时未定义的引用相关的知识,希望对你有一定的参考价值。

我在创建和链接库方面没什么经验,但这次我对这个愚蠢的事情感到疯狂。

-bash-3.2$ g++ -m32 src/main.cpp -Iinc -lblpapi3_32 -I/tmp/diff/include -L/tmp/diff/lib -lbbbmds
/tmp/ccQCKwnF.o: In function `main':
main.cpp:(.text+0x14e): undefined reference to `MDS::BloombergSource::BloombergSource()'
main.cpp:(.text+0x4ed): undefined reference to `MDS::BloombergSource::startSession()'
main.cpp:(.text+0x555): undefined reference to `MDS::BloombergSource::openService()'
main.cpp:(.text+0x560): undefined reference to `MDS::BloombergSource::authorize()'
main.cpp:(.text+0x5fc): undefined reference to `MDS::BloombergSource::AddSubscription(char const*, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, BloombergLP::blpapi::CorrelationId const&)'
main.cpp:(.text+0x655): undefined reference to `MDS::BloombergSource::subscribe()'
collect2: ld returned 1 exit status

确认我的lib引用了这些函数,例如下面

-bash-3.2$ nm /tmp/diff/lib/libbbbmds.so |grep startSession
0000000000002a62 t _ZN3MDS15BloombergSource12startSessionEv

进一步确认,

-bash-3.2$ c++filt _ZN3MDS15BloombergSource12startSessionEv
MDS::BloombergSource::startSession()

也,

-bash-3.2$ file /tmp/diff/lib/libbbbmds.so
/tmp/diff/lib/libbbbmds.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped

尝试重新排序libs / src。

答案

nm输出列出MDS::BloombergSource::startSession()函数作为t - 具有内部链接的函数。其他翻译单位无法提供此类功能。

以上是关于奇怪的错误 - 链接到自己的库gcc时未定义的引用的主要内容,如果未能解决你的问题,请参考以下文章

调用内联函数时未定义的引用

使用 gcc 而不是 icpc 编译时未定义的引用运行时错误 __intel_ssse3_rep_memcpy、_mm_free、_mm_malloc 链接器错误

链接时未定义引用符号'socket@GLIBC_2.4'

链接时未定义的引用 - 缺少库?

强制 GCC 通知共享库中未定义的引用

使用本地头文件时未定义的引用