Undefined symbol in shared object file
我使用以下代码编译了我的代码:
1
|
gcc –c –O3 –fPIC –fno–rtti –fno–implicit–templates –Wno–deprecated –I. –I/rw/include/ Exotic.C –o RBCExotic.o
|
当我尝试使用 //’RBCExotic.o//’ 文件时,我收到以下错误。
1
|
loading error /home/rw/rw_lib/Exotics.so: undefined symbol: _ZN5ArrayIPKvE4sizeEibbb
|
当我使用 nm 对代码进行解码时,出现错误的行是:
1
|
U Array<void const*>::size(int, bool, bool, bool)
|
但是,这个 //’size//’ 函数是在 //’/rw/include///’ 内的头文件中定义和实现的:
1
2 3 4 5 6 |
template <class T>
int Array< T >::size(int n, bool reduceMem, bool copyData, bool delData) { return _size(n, reduceMem, copyData, delData); } |
并且//’_size//’也定义在它的正下方。
我是否错误地编译了这段代码?还有其他可能的问题,这可能是某种红鲱鱼?
所以你对编译器撒了谎。你告诉它不要为了提供所需的符号而实例化
最好的解决方案是停止使用该选项,让编译器自动执行正确的操作。当您使用
有关更多信息,请参阅 GCC 手册,尽管该页面非常过时并且应该忽略
如果您真的非常想使用该选项,则需要为您使用的每个模板提供显式实例化(这是 GCC 文档中的第二个选项)。在
1
|
template class Array<void const*>;
|
或者对于单个函数:
1
|
template int Array<void const*>::size(int, bool, bool, bool);
|
我看到你包括头文件(-I)。那是Mac吗?我不认识路径。
也许这可以帮助你:
clang -stdlib=libc 导致未定义的引用
我看过
1
|
g++ –std=c++11 your_file.cpp –o your_program –I(as necessary)
|
在别处使用。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/268881.html