【问题标题】:Building DLLs that use other DLLs in Visual Studio 2005在 Visual Studio 2005 中构建使用其他 DLL 的 DLL
【发布时间】:2011-06-16 18:00:00
【问题描述】:

我正在尝试在 Visual Studio 2005 中并行化我们的构建过程,以利用我们的多核硬件。稍微简化一下,我有两个 DLL 和一个应用程序。 DLL A 没有依赖关系。 DLL B 使用 DLL A 中定义的某些函数。应用程序使用两者中定义的函数。

我认为我应该能够并行构建 A 和 B,因为在链接应用程序之前您不需要解析符号。但是,当我删除 DLL B 对 A 的项目依赖时,会出现如下错误:

YFindReplaceWidget.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) public: virtual unsigned long __thiscall CORBBaseComponent::GetRefCount(void)const " (__imp_?GetRefCount@CORBBaseComponent@@UBEKXZ)

有没有办法解决这些错误,以便我可以并行构建这些 DLL?

【问题讨论】:

    标签: c++ dll visual-studio-2005


    【解决方案1】:

    那是……一个非常奇怪的思维模式。 DLL 只不过是具有不同扩展名的 EXE,它们需要构建完整的链接信息。

    只要你的构建是这样的链(app->b->a),它们就不能并行构建。

    【讨论】:

    • DLL 是否有类似 EXE 的程序入口点?我原以为它们更像是实际上无法自行运行的库。
    • 从技术上讲,EXE 是具有WinMain 功能要求的 DLL。 DLL 确实有一个“入口点”DllMain,但它有些不同。尽管如此,我的观点仍然是,构建一个 DLL 与构建一个 EXE 并没有什么不同,它不能用不完整的链接器信息来完成。
    • 酷,我不知道这样的技术差异! :)
    • 有趣。我习惯认为它们更像是 Unix 下的 .so 文件,不需要完全链接。
    【解决方案2】:

    微软在 VS2008 中正式引入了多处理器内置选项。它将允许构建为同一个项目启动多个编译器。简单的解决方案就是升级到最新版本的 Visual Studio。

    如果您卡在 VS2005 上,那么它实际上也可以在那里使用,但不受官方支持。只需添加 /MP 作为附加的编译器选项。

    http://blog.280z28.org/archives/2007/10/17/(建议您不要在构建服务器上使用它)

    http://msdn.microsoft.com/en-us/library/bb385193.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多