visual c++,链接:致命错误 LNK1104:无法打开文件

Posted

技术标签:

【中文标题】visual c++,链接:致命错误 LNK1104:无法打开文件【英文标题】:visual c++, LINK : fatal error LNK1104: cannot open file 【发布时间】:2014-12-20 15:29:35 【问题描述】:

我是新C++,我有一个名为DiceInvaders.dll的dll文件,在我的项目中,我需要使用这个库,我使用的是visual c++ 2010,我将LinkerInput设置为@987654325 @和DiceInvaders.dll,我也把这个dll文件复制到了我的porject目录下,这行代码总是报错:

m_lib = LoadLibrary("DiceInvaders.dll");
assert(m_lib);

错误是断言失败。我应该如何解决这个问题?提前谢谢你。

【问题讨论】:

dll 可能不在正确的路径。 呃... virtual C++ 2010 还是 visual c++ 2010 ? 不要将DLL 作为库传递给链接器,它不能以这种方式链接。 @CaptainObvlious 那么我应该如何使用这个dll文件呢? 欢迎来到 DLL Hell 的一方面:***.com/questions/1379287/… 【参考方案1】:

首先,您不能像您一样将DLL 传递给链接器,它不是链接器识别的文件类型,并且不能以这种方式链接。当您创建Diceinvaters.dll 文件时,链接器将创建一个具有相同文件名和扩展名.lib 的导入库。看来这已经在进行了。这是在构建任何使用它的应用程序时应该传递给链接器的库文件。

其次,Diceinvaders.dll 文件必须可在DLL search path 中访问。这取决于您使用的 Windows 版本略有不同,但通常类似于以下内容

    加载程序的目录。 当前工作目录。 系统目录。 Windows 目录。 PATH 环境变量中列出的目录。

将 DLL 放在项目目录中是不够的。相反,您应该将它放在与依赖它的 EXE 文件相同的目录中。

【讨论】:

所以我只要把dll文件作为exe文件放到目录下就可以了,Visual c++上就不需要做更多了吗? 正确。只要您链接到导入库 (DiceInvaders.lib) 或使用 LoadLibrary 将其放置在与 .exe 相同的目录中,就可以使其正常工作。 谢谢,我从老师那里得到了这个dll文件,但是没有对应的lib文件,如何从dll文件中生成一个lib文件。 您无法从 DLL 文件生成 lib 文件。但是,如果您使用 LoadLibrary 加载 DLL,则不需要 lib 文件。 @CaptainObvlious 好吧,知道什么!谢谢。

以上是关于visual c++,链接:致命错误 LNK1104:无法打开文件的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 2010 - 致命错误 LNK1120: 1 unresolved externals; C++

为啥在 Visual Studio 中编译 C++ 项目时出现致命错误“LNK1104:无法打开文件 'cryptlib.lib'?

Visual C++ 2010 - 致命错误 LNK1169:找到一个或多个多重定义符号

错误:链接:致命错误 LNK1561:入口点必须定义 C++

安装 Visual Studio 2013 后的第一个构建错误。致命错误 LNK1561:必须定义入口点

MongoDB 和 Visual C++ 2008 链接器错误