Poco 库链接 BadCastException 的未定义引用
Poco library link undefined reference of BadCastException
通过以下命令行构建两个版本的Poco Lib 1.7.8和1.7.9p2:
./configure --static --shared --config=Linux
make
构建很好,我得到了一堆 .a 和 .so 库。然后我编写了以下代码片段来测试 Poco::Any
#include <iostream>
#include "Poco/Any.h"
int main()
{
Poco::Any data(10);
int i = Poco::AnyCast<int>(data);
std::cout << "Internal data = " << i << std::endl;
return 0;
}
然后我使用以下命令行编译它:
g++ test.cpp -o test -I../poco/poco-1.7.9p2/Foundation/include -L../poco/poco-1.7.9p2/lib/Linux/x86_64/libPocoFoundation.a
最后,我看到这样的链接错误:
test.cpp:(.text._ZN4Poco7AnyCastIiEET_RNS_3AnyE[_ZN4Poco7AnyCastIiEET_RNS_3AnyE]+0x64): undefined reference to `Poco::BadCastException::BadCastException(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)'
test.cpp:(.text._ZN4Poco7AnyCastIiEET_RNS_3AnyE[_ZN4Poco7AnyCastIiEET_RNS_3AnyE]+0x81): undefined reference to `Poco::BadCastException::~BadCastException()'
test.cpp:(.text._ZN4Poco7AnyCastIiEET_RNS_3AnyE[_ZN4Poco7AnyCastIiEET_RNS_3AnyE]+0x86): undefined reference to `typeinfo for Poco::BadCastException'
collect2: error: ld returned 1 exit status
然后我使用"nm"转储test.o和以下相关符号:
U _ZN4Poco16BadCastExceptionC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi
U _ZN4Poco16BadCastExceptionD1Ev
U _ZTIN4Poco16BadCastExceptionE
为了进一步调试,我也转储了libPocoFoundation.a符号。以下是所有带有BadCastException的符号:
00000000000059e0 T _ZN4Poco16BadCastExceptionaSERKS0_
0000000000005930 T _ZN4Poco16BadCastExceptionC1Ei
0000000000005960 T _ZN4Poco16BadCastExceptionC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi
00000000000059a0 T _ZN4Poco16BadCastExceptionC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_9ExceptionEi
0000000000005980 T _ZN4Poco16BadCastExceptionC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_i
00000000000059c0 T _ZN4Poco16BadCastExceptionC1ERKS0_
0000000000005930 T _ZN4Poco16BadCastExceptionC2Ei
0000000000005960 T _ZN4Poco16BadCastExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi
00000000000059a0 T _ZN4Poco16BadCastExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_9ExceptionEi
0000000000005980 T _ZN4Poco16BadCastExceptionC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES8_i
00000000000059c0 T _ZN4Poco16BadCastExceptionC2ERKS0_
0000000000001260 T _ZN4Poco16BadCastExceptionD0Ev
0000000000000c60 T _ZN4Poco16BadCastExceptionD1Ev
0000000000000c60 T _ZN4Poco16BadCastExceptionD2Ev
0000000000000910 T _ZNK4Poco16BadCastException4nameEv
0000000000003300 T _ZNK4Poco16BadCastException5cloneEv
0000000000003350 T _ZNK4Poco16BadCastException7rethrowEv
0000000000000920 T _ZNK4Poco16BadCastException9classNameEv
0000000000000000 V _ZTIN4Poco16BadCastExceptionE
0000000000000000 V _ZTSN4Poco16BadCastExceptionE
0000000000000000 V _ZTVN4Poco16BadCastExceptionE
U _ZN4Poco16BadCastExceptionC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi
U _ZN4Poco16BadCastExceptionD1Ev
U _ZTIN4Poco16BadCastExceptionE
U _ZN4Poco16BadCastExceptionC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi
U _ZN4Poco16BadCastExceptionD1Ev
U _ZTIN4Poco16BadCastExceptionE
U _ZN4Poco16BadCastExceptionC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi
U _ZN4Poco16BadCastExceptionD1Ev
U _ZTIN4Poco16BadCastExceptionE
Poco lib 和我的测试.cpp都是使用相同的编译器 gcc 5.3 编译的。我看到所有 BadCastException 符号都显示在 test.o 中,都在 lib 符号列表中。为什么我会收到链接错误?
链接器需要一个-llibrary
选项(小写l
)来搜索库。大写-L
提供搜索库的路径,但不告诉链接器包含其中的所有内容。
https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html
相关文章:
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 对 Scalar ::Scalar() 的未定义引用
- 对复制 CTOR 和 CTOR 的未定义引用
- 对显式实例化的模板函数的未定义引用
- TensorRT (C++ API) 对"createNvOnnxParser_INTERNAL"的未定义引用
- 2个模板化类的非模板友元函数未定义引用错误
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 获取对function_name的未定义引用
- 对 'std::thread::_M_start_thread CMake 的未定义引用进行基准测试
- 对结构方法的未定义引用
- 使用内联函数 c++ 的未定义引用
- 对 CMake 中'cudaRegisterLinkedBinary'链接错误的未定义引用?
- 对 DLOPEN 的未定义引用
- QT C++中对全局变量的未定义引用
- 快速数学导致对"__pow_finite"的未定义引用
- 对 boost::system::d etail::system_category_instance 的未定义引用,从
- OpenCV 3.4.3 中对 'cv::String::d eallocate()' 错误的未定义引用