【问题标题】:References to DFOR.LIB from Compaq Visual FortranCompaq Visual Fortran 对 DFOR.LIB 的引用
【发布时间】:2018-11-05 23:34:05
【问题描述】:

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

错误 105 错误 LNK1104:无法打开文件 'dfor.lib'

问题是对 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" 的命令?

【问题讨论】:

  • USE DFOR 是否出现在您的代码中的任何位置?这告诉代码使用 dfor.lib
  • @cup 我在任何代码中都没有看到任何对 DFOR 的引用,更不用说使用 DFOR。它确实出现的唯一文件是图像中看到的项目和日志文件。
  • 如果您删除 /defaultlib:dfor.lib,您能发布哪些未解析的外部符号吗?如果是一堆以QQ结尾的例程,试试dflib.lib或者ifqwin.lib
  • @cup 感谢您的回复和帮助,我刚刚将大部分错误添加到我的原始帖子中。我会尝试你说的两个套路,并在此期间报告任何进展。
  • 如果我使用 ifqwin.lib,我会收到更多未解析的外部错误,如果我尝试 dflib.lib,我会收到无法打开的错误

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


【解决方案1】:

在您上一个错误中提到CMainFrame 表明您在这里有一个基于 MFC 的项目。然而CMainFrame 类通常是MFC 项目的一部分,在文件MainFrm.hMainFrm.cpp 中定义。如果您的项目最初是由 Visual Studio 生成的,那么您的项目的 ReadMe.txt 文件应该会确认这一点。

CMainFrame::OnHtmlHelp 会有一个未解析的引用似乎有点可疑 - 但我绝对不是 MFC 专家!

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

在 Visual Studio 2010 文档中,Advanced features page 指向 this page。然而,在 Visual Studio 2012 文档中,Advanced features page 指向 this page,上面写着……

重要
此版本的 MFC 不支持 HTML 帮助。

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?


我不认识CZoomViewCDialogCurrentPhasorCDialogRunAnalysisFromFilePF(这不一定意味着很多)。它们没有出现在 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&lt; … &gt; 部分是函数的返回类型。第六个错误是针对相关函数petMove::getPartType(void),它返回一个unsigned int

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

例如,petMove::ToStringpetMove::getPartType 的实现可能会丢失;或注释掉;或被不正确的#ifdef 取代。

其他四个缺失的符号都是构造函数或析构函数

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

CDialogCurrentPhasor::CDialogCurrentPhasor(class CWnd *)

CDialogRunAnalysisFromFilePF::~CDialogRunAnalysisFromFilePF(void) 

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

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

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

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

// CZoomView.cpp

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

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

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

【讨论】:

  • 非常感谢您的帮助。我对所有这些都是新手,所以我可能需要一段时间才能弄清楚如何做到这一点并测试所有这些解决方案,但我会就结果回复你。还有最后一个问题,我应该删除 /defaultlib:dfor.lib 吗?我也尝试过多次重建整个解决方案,并且所有的 fortran 都能正确编译,但在尝试生成代码并加载目标文件后它失败了。
  • 另外,我似乎缺少 CStringT 的这两个头文件。
  • 暂定,是的,您应该删除/defaultlib:dfor.lib,但需要注意的是,当我们解决您的问题时,我们可能会发现新的问题,迫使我们将其重新添加。
  • 当你说你“缺少这两个头文件”时,你的意思是你在系统上找不到它们,或者你找不到提到它们的#include?必须定义 CStringT 或包含 CStringT.cpp 文件将无法编译。探索此问题的一种方法是右键单击您的 .cpp 文件之一中提到的 CStringT,然后在结果上下文菜单中单击“转到定义”。这将打开 Visual Studio 认为用于定义该类型的头文件。右键单击文件的名称选项卡,然后单击打开文件夹以转到其位置。
  • 我用agent ransack搜索,发现没有名为CStringT的文件,只在目标文件、预编译头文件和项目文件中提及。我发现字符串 atlstr 也是如此。但是,源代码中有很多提到CString,但没有提到CString.h,也有提到CStack.h。但是,我确实在 *C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include* 中找到了CStringT.h
猜你喜欢
  • 2013-04-12
  • 2014-07-28
  • 2019-05-29
  • 2012-04-26
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多