Bootstrap

C++ 报错 LNK2019 无法解析的外部符号

最近因工作需求,需要将一个老版的Dll库重新封装为Release 64位,遇到一下问题:

错误 LNK2019 无法解析的外部符号 "public: double __cdecl NTL::Vector3D::z(void)const " (?z@Vector3D@NTL@@QEBANXZ),函数 "int __cdecl NTL::solve3x2(double const * const,double const * const,double,double,double,double *,double *,double *,double *)" (?solve3x2@NTL@@YAHQEBN0NNNPEAN111@Z) 中引用了该符号 RegV3 E:\RegV3\NumericEquations.obj 1

在网上找了很多方法:包括是否使用到了模板类,虽然确实使用到模板类,但是并不是模板类产生的问题。

解决方法:

  1. Vector3D::z() 函数: 确保在 NTL::Vector3D 类的头文件或源文件中,有 double z() const; 这样的声明,并且有对应的定义。
  2. solve3x2() 函数: 确保在你的代码中有 int solve3x2(const double* const, const double* const, double, double, double, double*, double*, double*, double*); 这样的声明,并且有对应的定义。

 问题出现在第一个函数上,在我的Vector3D 类的.h文件中,我是这样声明的:inline double x(void) const,后面翻看了inline的用法:在头文件中声明inline成员函数时,通常还需要在头文件中提供该函数的实现。因为inline函数需要在每个包含该头文件的.cpp文件中都有一份副本。如果函数只是声明为inline但在其他.cpp中实现,链接器找不到该函数在调用点所需的实现方法。删除掉inline后问题就解决了。

最后用AI汇总了一下问题的出现和解决办法:

 

;