链接器 C++11 仅标头错误
Linker C++11 error with header-only
我试图为现有项目编写一个仅标题库。编译器(不再)有错误,但链接器(叮当)失败了...
我正在使用 CMake,我的库添加了以下行:
set(RODE_DIR rode)
include_directories (${RODE_DIR})
错误如下:
Undefined symbols for architecture x86_64:
"sfm::StreamlineWrf::ComputeStreamline(sfm::NdArray<float>*, sfm::NdArray<float>*, sfm::NdArray<float>*, sfm::NdArray<float>*, int&, int&, int&, double const*, int, double, std::__1::vector<double, std::__1::allocator<double> >*)", referenced from:
_main in wrf2sl.cc.o
"sfm::ijktos(sfm::NdArray<float>*, sfm::NdArray<float>*, sfm::NdArray<float>*, int const*, double const*, double*, double*, double*)", referenced from:
_main in wrf2sl.cc.o
"typeinfo for MethodModel", referenced from:
typeinfo for HeunEuler1 in wrf2sl.cc.o
typeinfo for HeunEuler2 in wrf2sl.cc.o
typeinfo for DormandPrince in wrf2sl.cc.o
typeinfo for BogackiShampine in wrf2sl.cc.o
typeinfo for RK41 in wrf2sl.cc.o
"vtable for MethodModel", referenced from:
MethodModel::MethodModel() in wrf2sl.cc.o
MethodModel::~MethodModel() in wrf2sl.cc.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"vtable for rODE", referenced from:
rODE::rODE(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, float) in wrf2sl.cc.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"vtable for Method", referenced from:
Method::Method(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, float) in wrf2sl.cc.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"vtable for Solver", referenced from:
Solver::Solver(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, float) in wrf2sl.cc.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
"vtable for sfm::StreamlineWrf", referenced from:
sfm::StreamlineWrf::StreamlineWrf(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, float) in wrf2sl.cc.o
NOTE: a missing vtable usually means the first non-inline virtual member function has no definition.
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [expt/wrf2sl] Error 1
make[1]: *** [expt/CMakeFiles/wrf2sl.dir/all] Error 2
make: *** [all] Error 2
你知道发生了什么吗?
解释可能在错误中:
"缺少 vtable 通常意味着第一个非内联虚拟成员函数没有定义。 "vtable for rODE",引用自:"
遍历您的类、方法、方法模型、求解器等,并检查它们的每个虚拟成员函数,并确保每个函数都有一个定义,该定义位于正在链接的 .c/.cxx/.c++ 模块中。你可能会发现一个没有定义,或者在未由 CMake 链接的文件中定义的一个。
相关文章:
- C++11 中好友模板类的视觉C++错误
- 我将 Makefile 更改为 C++11 版本,但仍然收到列表初始值设定项错误
- C++ Visual Studio 错误:名称后跟'::'必须是类或命名空间名称 (DirectX 11)
- 使用 C++11 时列表中出现编译错误
- main.cpp(11):错误 C2059:语法错误:"字符串"
- C++ 分段错误:11 错误,同时编码将两个数字相加的链接列表
- 分割错误 11:尝试使用 cin 输入 B[1] 时
- 外部函数在 main() 上调用时返回分段错误 11.(C++)
- C++ 11 Boost 1.65 recursive_directory_iterator给出分段错误
- 在 centos 7 上编译 Qt 5.11.1 中的错误
- 覆盖 iostream <<会导致错误 - C++ 11
- 树实现给出分段错误(核心转储)错误 c++ 11
- 奇怪的错误C++ 11 模板类
- CMAKE错误:C 11不支持Mac High Sierra
- Visual Studio 2015 c++ 项目错误 c++11 标准
- Clang++ 非静态数据成员初始化错误?C++11.
- 简单C++代码上的运行时错误信号11
- 指向类方法错误c++11的指针数组
- Coderunner 2 -初始化列表错误- c++ 11
- C++ 分段错误:11,试图使操作员过载<<