【问题标题】:C++ Newbie: Having all sorts of problems linkingC++新手:有各种各样的链接问题
【发布时间】:2009-02-04 19:03:30
【问题描述】:

我在 Visual Studio 2008 中使用 tessdll 时遇到了几个问题。仅供参考,我将此应用程序创建为 MFC 应用程序,我这样做只是为了利用我需要的简单 GUI。从那里开始就是直接的 C++ 和 win32。

由于某种原因,它作为调试版本构建得很好(因为我已经包含了我需要的头文件和 lib 文件,并且 dll 驻留在我可以放置的每个目录中......)。

因此,在构建发布版本期间存在链接问题:

Linking...
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec
(dllimport) public: __thiscall TessDllAPI::TessDllAPI(char const
*)" (__imp_??0TessDllAPI@@QAE@PBD@Z)
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec
(dllimport) public: __thiscall TessDllAPI::~TessDllAPI(void)" (__imp_??
1TessDllAPI@@QAE@XZ)
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec
(dllimport) public: int __thiscall TessDllAPI::BeginPage(unsigned
int,unsigned int,unsigned char *,unsigned char)" (__imp_?
BeginPage@TessDllAPI@@QAEHIIPAEE@Z)
MTGOBot.obj : error LNK2001: unresolved external symbol "__declspec
(dllimport) public: struct ETEXT_STRUCT * __thiscall
TessDllAPI::Recognize_all_Words(void)" (__imp_?
Recognize_all_Words@TessDllAPI@@QAEPAUETEXT_STRUCT@@XZ)
C:\CPP Projects\Visual Studio 2008\Projects\MTGO SO Bot\MTGO SO Bot
\Release\MTGO SO Bot.exe : fatal error LNK1120: 4 unresolved externals 

此外,作为参考,可以在此处找到 tessdll.h 的源代码: http://code.google.com/p/tesseract-ocr/source/browse/trunk/tessdll.h?r=165

更多细节:

  • 我从工具栏调试并使用 集成调试器。
  • 我使用批处理 构建以创建发布版本。

【问题讨论】:

    标签: c++ visual-studio visual-studio-2008 linker linker-errors


    【解决方案1】:

    第一个猜测:您没有使用 DLL 的链接库。链接器大喊找不到一些符号,TessDllAPI 听起来很像一个 DLL。默认情况下(阅读:在项目设置对话框启动中)所有项目设置都特定于构建配置(调试、发布),但您可以从 GUI 中选择“所有配置”。这可以解释为什么它在一种配置中有效,而在另一种配置中无效。

    试一试

    #pragma comment(lib:"tessdll")
    // (Of course you need to replace the `tessdll` with the name of the library.)
    

    在头文件中,或在“发布”配置中添加此库以进行链接。

    【讨论】:

      【解决方案2】:

      没有看到项目设置,这很难。 检查事项(调试和发布设置之间的差异):

      1) 您是否在发布版本中包含 .lib?

      2) 您是否不小心为 tessdll 定义了预处理器指令?

      我会浏览设置,在调试和发布之间来回切换,看看意外添加/忘记了什么。

      DLL 的存在仅在运行时需要。你还没有走那么远。

      【讨论】:

      • 如何确保 lib 包含在发布版本中?我认为 proejct -> 属性 -> 链接器 -> 高级 -> 附加包含将适用于两者?它似乎适用于调试。更多细节已在问题中更新。
      • 发布我的答案后才看到评论。好吧,不,这些设置不适用于这两种配置。
      • 啊,呵呵。认为他们这样做是因为我似乎无法找到每种构建类型的设置。因此标题中的 C++ 新手 :O
      • 那么通过对比配置设置问题解决了吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 2016-10-23
      • 2019-02-12
      相关资源
      最近更新 更多