c++ - Compaq Visual Fortran 中对 DFOR.LIB 的引用

标签 c++ visual-studio visual-c++ visual-studio-2013 fortran

我有一个旧的 Visual C++ 项目,它使用 FORTRAN 静态库 来创建对象。我目前遇到的问题是该项目最初是使用 Compaq Visual Fortran 编译器创建的,该编译器使用 DFOR 库。但是,我收到错误:

Error 105 error LNK1104: cannot open file 'dfor.lib'

问题是对库的剩余引用需要替换。但是,我已经重建项目几次,重新创建我有源文件的所有对象,但错误没有解决。我在项目中的所有文件中搜索字符串 dfor.lib,结果只有这些文件。

Image of files containing string 'dfor.lib'

在项目链接器属性中,如果我在命令行中删除行 /defaultlib:"dfor.lib",我会收到以下错误:

Error   6   error LNK2001: unresolved external symbol "public: class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > > __thiscall petMove::toString(void)" (?toString@petMove@@QAE?AV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@XZ) C:\Users\Gavin\Desktop\College stuff\1st year (Fresher)\Pet_Gavin\pet_neda\Power Network CaptureView.obj    Power Network Capture
Error   23  error LNK2019: unresolved external symbol "protected: __thiscall CZoomView::CZoomView(void)" (??0CZoomView@@IAE@XZ) referenced in function "protected: __thiscall CPowerNetworkCaptureView::CPowerNetworkCaptureView(void)" (??0CPowerNetworkCaptureView@@IAE@XZ)   C:\Users\Gavin\Desktop\College stuff\1st year (Fresher)\Pet_Gavin\pet_neda\Power Network CaptureView.obj    Power Network Capture
Error   24  error LNK2019: unresolved external symbol "protected: virtual __thiscall CZoomView::~CZoomView(void)" (??1CZoomView@@MAE@XZ) referenced in function "public: virtual __thiscall CPowerNetworkCaptureView::~CPowerNetworkCaptureView(void)" (??1CPowerNetworkCaptureView@@UAE@XZ)    C:\Users\Gavin\Desktop\College stuff\1st year (Fresher)\Pet_Gavin\pet_neda\Power Network CaptureView.obj    Power Network Capture
Error   7   error LNK2019: unresolved external symbol "public: __thiscall CDialogCurrentPhasor::CDialogCurrentPhasor(class CWnd *)" (??0CDialogCurrentPhasor@@QAE@PAVCWnd@@@Z) referenced in function "public: void __thiscall CCurrentPhasor::SEDialogHandler(void)" (?SEDialogHandler@CCurrentPhasor@@QAEXXZ) C:\Users\Gavin\Desktop\College stuff\1st year (Fresher)\Pet_Gavin\pet_neda\Power Network CaptureDoc.obj Power Network Capture
Error   5   error LNK2019: unresolved external symbol "public: class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > > __thiscall petMove::toString(void)" (?toString@petMove@@QAE?AV?$CStringT@DV?$StrTraitMFC@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@XZ) referenced in function "public: int __thiscall CPowerNetworkCaptureDoc::PushMove(class petMove *)" (?PushMove@CPowerNetworkCaptureDoc@@QAEHPAVpetMove@@@Z)  C:\Users\Gavin\Desktop\College stuff\1st year (Fresher)\Pet_Gavin\pet_neda\Power Network CaptureDoc.obj Power Network Capture
Error   22  error LNK2019: unresolved external symbol "public: unsigned int __thiscall petMove::getPartType(void)" (?getPartType@petMove@@QAEIXZ) referenced in function "protected: void __thiscall CPowerNetworkCaptureView::OnChar(unsigned int,unsigned int,unsigned int)" (?OnChar@CPowerNetworkCaptureView@@IAEXIII@Z)    C:\Users\Gavin\Desktop\College stuff\1st year (Fresher)\Pet_Gavin\pet_neda\Power Network CaptureView.obj    Power Network Capture
Error   14  error LNK2019: unresolved external symbol "public: virtual __thiscall CDialogRunAnalysisFromFilePF::~CDialogRunAnalysisFromFilePF(void)" (??1CDialogRunAnalysisFromFilePF@@UAE@XZ) referenced in function "protected: void __thiscall CPowerNetworkCaptureDoc::OnAnalysisRunFromFilePF(void)" (?OnAnalysisRunFromFilePF@CPowerNetworkCaptureDoc@@IAEXXZ)    C:\Users\Gavin\Desktop\College stuff\1st year (Fresher)\Pet_Gavin\pet_neda\Power Network CaptureDoc.obj Power Network Capture
Error   3   error LNK2019: unresolved external symbol _HtmlHelpW@16 referenced in function "protected: void __thiscall CMainFrame::OnHtmlHelp(void)" (?OnHtmlHelp@CMainFrame@@IAEXXZ)   C:\Users\Gavin\Desktop\College stuff\1st year (Fresher)\Pet_Gavin\pet_neda\MainFrm.obj  Power Network Capture

还有一些,但它们与这些非常相似。

这些错误是更容易解决的错误还是表明需要 /defaultlib:"dfor.lib" 命令?

最佳答案

提及CMainFrame在上一个错误中,建议您在此处有一个基于 MFC 的项目。然而 CMainFrame类通常是 MFC 项目的一部分,在文件 MainFrm.h 中定义和 MainFrm.cpp .如果您的项目最初是由 Visual Studio 生成的,那么您项目的 ReadMe.txt 文件应该可以确认这一点。

CMainFrame::OnHtmlHelp 似乎有点可疑会有 Unresolved reference - 但我绝对不是 MFC 专家!

似乎对 MFC 应用程序中的 HTML 帮助 的支持已随 Visual Studio 2010 结束。MFC 应用程序向导的高级功能页面包含一个复选框,用于上下文相关帮助 (HTML).该复选框的文档指向更多信息。

在 Visual Studio 2010 文档中 Advanced features page指向 this page .但是在 Visual Studio 2012 文档中 Advanced features page指向 this page上面写着……

Important
HTML Help is not supported in this version of MFC.

Visual Studio 2013 文档指向一个 similar page

What's New for Visual C++ in Visual Studio 2012Breaking Changes in Visual C++ 2012页面没有提到 HtmlHelp 被取消实现,也没有提到替代或解决方法。

有一个未回答的 SO 问题:htmlhelp.lib for Visual Studio 2012 MFC app? .


我不认识CZoomView , CDialogCurrentPhasorCDialogRunAnalysisFromFilePF (这不一定意味着很多)。它们没有出现在 Visual Studio 2013 的 MFC 文档中,这表明它们要么在您的项目中定义,要么是某些第三方包的一部分。

您确定您的构建正在编译它应该编译的所有 .cpp 文件吗?您是否尝试过重建整个解决方案?

如果这些是由您的项目定义的类,它们可能会受到 Htmlhelp 问题的影响。


您可能应该首先尝试解决 LNK2001 CStringT错误,因为它是第一个。其他错误可能是该错误的下游影响(如果幸运的话)。

…长的误导性(和错误)部分已删除…

再看一遍那个错误,我意识到我把注意力集中在 CStringT 上让你走错了方向。 .错误文本的相关部分是...

error LNK2001: unresolved external symbol 
  "public: class ATL::CStringT<char,class StrTraitMFC<char,class ATL::ChTraitsCRT<char> > >
  __thiscall petMove::toString(void)" 

未解析的符号是函数petMove::toString(void) ATL::CStringT< … > part 是函数的返回类型。第六个错误是针对相关函数petMove::getPartType(void)返回 unsigned int .

假设petMove是在您的项目中定义的类(或结构),也许检查该类的实现会告诉您一些有关链接错误的信息。

例如 petMove::ToString 的实现和 petMove::getPartType可能会丢失;或注释掉;或被不正确的#ifdef .

另外四个缺失的符号都是构造函数或析构函数

CZoomView::CZoomView(void)
CZoomView::~CZoomView(void) 

CDialogCurrentPhasor::CDialogCurrentPhasor(class CWnd *)

CDialogRunAnalysisFromFilePF::~CDialogRunAnalysisFromFilePF(void) 

您的项目是否可能缺少 CZoomView 的一些实现文件? , CDialogCurrentPhasorCDialogRunAnalysisFromFilePF ?或者,您可能有一个头文件,其中定义了您的实现 .cpp 文件未声明的构造函数和/或析构函数。

例如这个头文件定义了两个构造函数...

// CZoomView.h 
class CZoomView
{
public:
   CZoomView();
   CZoomView(int);
   // ...
}; 

……但是这个实现文件只声明了其中一个……

// CZoomView.cpp

// Simulate missing ctor
//CZoomView::CZoomView()
//{
//}

CZoomView::CZoomView(int)
{
   // ...
}

该组合将编译成功但会给出链接器错误 LNK2019

关于c++ - Compaq Visual Fortran 中对 DFOR.LIB 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50548321/

相关文章:

c++ - 在 C++03 中,我应该如何分配从工厂函数返回的 boost::interprocess::unique_ptr,可能使用 boost::move

c# - 从 Sense 查询转移到 Visual Studio 查询

c++ - 如何从子目录自动加载 DLL?

c++ - 如何强制 MSVC 链接未使用的静态库(相当于 GCCs --whole-archive 参数)

visual-c++ - VC++中如何检查编辑框是否为空

c++ - 取消引用已删除的指针总是会导致访问冲突?

c++ - Visual Studio C++ 切换评论?评论而不选择整行?

c++ - 我应该如何在不使用 C++ 中的构造函数的情况下将值(而不是指针)转换为子类?

c# - 如何让 Resharper 知道框架版本?

c++ - 使用超线程正确测量 CPU 使用率?