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,我将Linker
Input
设置为@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++