【问题标题】:Distributing dlls: What to do with .lib files?分发 dll:如何处理 .lib 文件?
【发布时间】:2013-04-10 06:23:03
【问题描述】:

我在 Visual Studio 中使用 C# 创建了一个dll。它的依赖项中有六个.lib 文件。

通过阅读此处的其他一些问题,我了解到.lib 文件是在运行时链接的,这让我认为这些文件不包含在我制作的.dll 文件中。

那么,我该如何分发dll 文件呢?我是否必须将.lib 文件与.dll 文件一起发送,或者有什么方法可以静态编译它,以便所有内容都包含在.dll 文件中?

【问题讨论】:

  • .NET 没有链接阶段。您如何使用.lib 文件?
  • @MD.Unicorn 非常准确地说,C# 项目引用了一个 C++ 项目,该项目又依赖于这六个库(通过Additional Dependencies 选项)。
  • C++ 项目的输出将包含嵌入其中的六个库的代码。因为 .lib 文件是静态链接的。该 C++ 项目的输出是什么?那是一个 C++/CLI 项目吗?
  • 它是一个非托管 C++ 项目,也输出一个.dll 文件。
  • 我认为您不需要包含这些库。只需 C++ dll 就足够了。尝试在不包含 lib 文件的情况下运行最终输出,看看是否有任何错误。您还需要包含该 C++ dll 文件。

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


【解决方案1】:

要查看哪些文件应与 DLL 一起分发,您可以使用Dependency Walker。只需将您的 DLL 文件拖到应用程序中,看看它是否有任何依赖项。

另请注意,您可能需要分发 Visual C++ 运行时(“Visual C++ Redistributable Package”)。

【讨论】:

  • @kshahar 您能否详细说明最后一点?我现在正在测试,似乎我的 C# dll 正在抱怨,因为它找不到 C++ dll。这可能是因为我没有添加对后者的引用,但是,这在 Visual Studio 中似乎是不可能的。 (“无法添加对 Foo.dll 的引用。请确保该文件可访问,并且它是有效的程序集或 COM 组件。”)
【解决方案2】:

对于 C#,您不需要包含任何 .lib 文件。 它们由 C/C++ 编译器在链接步骤中使用,但 C# 使用带有 [DLLImport()] 属性的 DLL 链接(动态加载和 GetProcAddress)。

只需将 DLL 与您的应用程序一起分发就可以了。

【讨论】:

    猜你喜欢
    • 2014-05-30
    • 2013-02-22
    • 2016-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多