【问题标题】:visual c++, LINK : fatal error LNK1104: cannot open filevisual c++,链接:致命错误 LNK1104:无法打开文件
【发布时间】: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 的一方面:stackoverflow.com/questions/1379287/…

标签: c++ visual-c++ dll


【解决方案1】:

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

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

  1. 加载程序的目录。
  2. 当前工作目录。
  3. 系统目录。
  4. Windows 目录。
  5. PATH 环境变量中列出的目录。

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

【讨论】:

  • 所以我只要把dll文件作为exe文件放到目录下就可以了,Visual c++上就不需要做更多了吗?
  • 正确。只要您链接到导入库 (DiceInvaders.lib) 或使用 LoadLibrary 将其放置在与 .exe 相同的目录中,就可以使其正常工作。
  • 谢谢,我从老师那里得到了这个dll文件,但是没有对应的lib文件,如何从dll文件中生成一个lib文件。
  • 您无法从 DLL 文件生成 lib 文件。但是,如果您使用 LoadLibrary 加载 DLL,则不需要 lib 文件。
  • @CaptainObvlious 好吧,知道什么!谢谢。
猜你喜欢
  • 2012-08-03
  • 2011-09-07
  • 2011-06-23
  • 2017-11-29
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多