【问题标题】:Visual Studio 2008 C++. Problem Referencing DLL Project视觉工作室 2008 C++。引用 DLL 项目的问题
【发布时间】:2011-02-07 13:11:16
【问题描述】:

我有一个包含两个项目的解决方案:一个是带有简单类 (dll_test) 的简单 dll。第二个项目引用了dll项目,应该是用来测试dll项目的(dll_tester)。 dll 项目构建良好,但 tester 项目总是抱怨找不到 dll_test.lib 而不是 dll_test.dll,就像它应该找到的那样。

同样,这适用于 Windows 7 计算机上的 Visual Studio 2008。我不认为这有什么区别,但是我用 dll_test 项目开始了解决方案,后来又添加了 dll_tester 项目。

有人知道怎么解决吗?

【问题讨论】:

  • 澄清一下,您是否将 dll_test.lib 添加到 Properties->Linker->Input 及其到 Properties->Linker->Additional Library Directories 的路径?
  • 不,我没有。但它不应该是创建一个 lib,它应该是创建一个 dll。
  • 你需要有头文件,DLL文件它对应的LIB文件来静态引用一个DLL项目。实际代码当然在 DLL 中,但需要 LIB 文件,以便链接器可以静态链接到 DLL。编译 DLL 项目时,链接器应创建 DLL 文件及其 LIB 文件。
  • 嗯,好的。不过,我在任何地方都没有看到任何 LIB 文件。我查看了解决方案和各个项目的所有 Debug 文件夹。也许我应该为 dll 编译一次,为 lib 编译一次?
  • 这可能是因为您忘记从 DLL 导出函数。 DLL 上的 Dumpbin.exe /exports 向您显示。您必须使用 __declspec(dllexport) 来导出函数。

标签: c++ visual-studio-2008 dll reference


【解决方案1】:

啊,Visual Studio 中的 DLL 和依赖项的乐趣。我发誓,C# 程序员很容易 :)

您确定 LIB 文件确实是创建的吗?如果您的 DLL 项目不导出任何符号,您将不会获得 lib 文件,因此您将没有任何可链接的内容。所以你需要确保:

  1. 您的 DLL 项目定义了类似 MYPROJECTNAME_EXPORTS 的内容。当您在创建项目时选中相应的框时,Visual Studio 会为您定义此符号。如果你不这样做,那很简单。确保上述符号位于您的 DLL 的预处理器指令中,并确保在公共头文件中定义以下内容:

    #if defined(MYPROJECTNAME_EXPORTS)
    #define MYPROJECT_API __declspec(dllexport)
    #else
    #define MYPROJECT_API __declspec(dllimport)
    #endif
    
  2. 一旦我们知道 MYPROJECT_API 已正确定义,我们需要确保我们希望导出的任何类或函数在其声明中都有:

    class MYPROJECT_API SomeClass
    {
    }; // eo class SomeClass
    

这个类需要被实现并且实际上一些编译器没有优化掉的东西。

简而言之,您找不到.lib 文件的原因是没有生成任何符号,因为没有从中导出符号。

【讨论】:

  • 太棒了,谢谢。我不敢相信我忘了导出一些东西 :^)
【解决方案2】:

在解决方案资源管理器中右键单击 dll_tester 并查看“项目依赖项...”并确保选中 dll 项目

【讨论】:

    猜你喜欢
    • 2010-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    相关资源
    最近更新 更多