【问题标题】:How to build a visual studio 2010 solution into a standalone dll?如何将 Visual Studio 2010 解决方案构建成独立的 dll?
【发布时间】:2013-08-22 00:12:18
【问题描述】:

我有一个 Visual Studio 2010 项目,使用静态和动态库(.lib.dll),该项目在发布和调试模式下都以 .exe 成功编译和构建,代码是 c 和 c++ .

将所有解决方案编译并打包到一个独立的.dll 文件的正确方法是什么。

我想要一个dll文件,我可以安全地加载到其他c、c++、c#项目中。

在我的情况下,我想将它加载到 teraterm 和其他简单的自行开发的 c# 应用程序中。

【问题讨论】:

  • 解决方案本身无法编译为单个 dll。解决方案中的每个项目都是针对特定的构建目标构建的,无论是 dll、exe 还是其他东西。要只有一个 dll,您的解决方案中应该只有一个项目。您可能想要的是让一个项目编译为 dll(因此它可以加载到不同的应用程序中)和一个引用另一个项目并编译为 exe 的不同项目。
  • 我无法确定这个问题是肤浅的还是深不可测的。也许我遗漏了一些东西,因为我不熟悉 teraterm 或者确实不熟悉将可执行文件包装到 DLL 中的原因——可执行文件和 DLL 用于不同的目的。也就是说,您是否完全控制了项目中涉及的所有 DLL? DLL 是显式链接(通过 lib 文件)还是使用 LoadLibrary 调用?要制作单个 DLL,您需要将它们转换为使用静态链接。
  • 这可能是一个细节,但意外的细节可能会破坏其中一种方法,因此:“...大部分代码是 c 和 c++。”和休息是由什么组成的?
  • @alk 所有代码都是 c 或 c++。谢谢

标签: c# c++ c visual-studio-2010 dll


【解决方案1】:

Visual Studio 有一个名为“Link Library Dependencies”的 C++ 链接器选项:http://msdn.microsoft.com/en-us/library/024awkd1(v=vs.90).aspx

这会将解决方案中所有项目的目标文件直接链接到项目输出中(通过依赖项跟踪)。但是,使用它时要小心,如果您在 EXE 中使用它,并且您要链接的 DLL 导出符号,您的 EXE 也会导出它们。

更新:

这里有更多详细信息:链接器不是链接 DLL(这假设您将要链接的 DLL 设置为解决方案中项目的依赖项)以生成单独的二进制文件,而是从每个单独的项目依赖项并将它们直接链接到最终的可执行文件/DLL,从而创建一个整体 DLL。

副作用是(取决于代码)输出的整体大小会稍微减小,整体 DLL(或 EXE)通常可能很大,但比单个输出文件组合的大小要小,因为链接时优化。由链接对象导出的任何符号都将由最终的 DLL 导出,因为它们在编译步骤中被标记为这样。

【讨论】:

  • 听起来是个不错的解决方案,我在 linux 上使用 GCC 尝试了几次,它使您的程序变得庞大,但它确实有效。我错过了什么吗?如果您可以丰富您的答案并确认它是解决方案,我会标记它。 +1 谢谢。
  • 完成了,抱歉之前好像有点含糊,睡得不多,想在睡前快速回复。 编辑: 我不建议在 Linux 上这样做,它肯定会弄乱依赖关系,除非你在每个平台上重建你的二进制文件,否则可能很难在不引起潜在问题的情况下将它重新分发给用户。这完全取决于您链接的库类型以及它们是否具有特定于平台的代码。
【解决方案2】:

可能有一个问题,但是在 VS2010 中,您应该只需单击启动项目,选择“属性”-> '配置属性' -> '通用' -> '配置类型' -> 将其设置为'动态库(dll)'

【讨论】:

  • 你能丰富你的答案吗?
猜你喜欢
  • 2012-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多