【问题标题】:C++ - cannot link to a static library in VS2015C++ - 无法链接到 VS2015 中的静态库
【发布时间】:2016-12-06 10:18:54
【问题描述】:

我正在尝试将我的项目(C++ 控制台应用程序)链接到 Visual Studio 2015 中的外部静态库(基本上是 .lib 文件和 .h 头文件)。

我已将包含.lib(我创建的特定文件夹,位于项目的根文件夹下,仅包含 .lib 文件)的文件夹的路径添加到项目属性下的

  1. “C/C++ - 常规 - 附加包含目录”
  2. “链接器 - 常规 - 附加库目录”

我还在“链接器 - 输入 - 附加依赖项”中添加了文件名。 作为测试,我尝试指定错误的文件名 - 这导致了 LNK1104 错误(指定正确名称时不会发生)。

由于某种原因,一旦我将#include 库头(.h 文件)放入我的main.cpp 文件中,就会出现 “系统错误” -

程序无法启动,因为您的计算机中缺少 external_dll.dll [..]

由于某种原因,链接器会根据 #included 标头的名称查找 .dll 文件 - 尽管我已将项目与静态库(.lib 文件)链接。

这个.dll 文件当然不存在。

我在这里遗漏了什么吗?

【问题讨论】:

  • 能写出库名吗?

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


【解决方案1】:

如果是以下情况:-

“由于某种原因,链接器会根据 #included 标头的名称查找 .dll 文件 - 尽管我已将项目与静态库(.lib 文件)链接。”

那么应该有一些方法可以禁用此功能,我的意思是在VS2015的项目设置中,应该能够使链接器停止寻找dll文件对应的dll#include头文件。

还有排除字段,如果你不能做到以上,你可以尝试排除你遇到的dll文件,然后从那里取出。

【讨论】:

    【解决方案2】:

    您的应用程序无法找到 DLL 文件。最简单的解决方案是将该 DLL 放入您的 exe 文件所在的文件夹中。

    【讨论】:

    • 显然,静态库只是将您的应用程序与您的情况下的某个 DLL 静态链接。 stackoverflow.com/questions/424032/how-to-link-a-dll-statically
    • @golosovsky - 你绝对确定不应该有DLL吗? 许多基于 DLL 的库带有一个 .h(用于编译时)、一个 .lib(用于链接时)和一个 .dll(用于运行时)。在这些情况下,H 和 LIB 通常是一个简单的包装器,它加载 DLL 并执行任何必要的获取 proc 地址的工作,以及处理任何 ABI 问题 - 但在运行时仍然需要 DLL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    相关资源
    最近更新 更多