VC ++ VS 2005 LNK1104错误:Win32 exe项目正在寻找.lib而不是.dll

时间:2012-03-01 21:02:28

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

我在VS2005中有一个VC ++项目,如下所示:

设定:

  • 一个赢得32个控制台的exe作为启动/进入点
  • 其他三个DLL项目......全部编译
  • 控制台引用了3个DLL,如exe \ CommonProperties \ References中所示。 每个DLL项目的FullPath路径显示DLL的路径(即lib1.dll) 项目lib1。对于lib2和lib3项目也是如此。

  • for win32 exe:... \ Configuration Properties \“C / C ++”\ General \ Additional Include Directories include包括SolutionFolder \ Lib1。 ConfigProperties \ Linker \ General \ Additional Library Directories也是SolutionFolder \ Lib1

问题:

在Configuation Properties \ Debugging \ Environment \ Macros \ References中,我只看到LIB2.DLLLIB3.DLL的引用,而不是LIB1.DLL

Compilaton:

所有三个DLL项目编译正常。

链接错误:

Fatal error LNK1104: cannot open file '..\debug\boostlib1.lib

**为什么链接器要查找lib文件(即lib1.lib)而不是lib1.dll

这是某种类型的路径问题吗? 为什么我在Config\Props\Debugging\Environment\Macros\References中没有看到lib1的引用?

注意:

  • 我在lib1中使用Boost 1_39
  • win32 exe引用lib1,lib2,lib3
  • lib3引用lib2& LIB3
  • 在win32 exe proj中的
  • stdafx.h有一个#pragma once指令

2 个答案:

答案 0 :(得分:1)

在仅适合C ++ / CLI编译器的设置中,您会感到有些迷失。换句话说,托管代码。如果您正在使用boost和win32项目,那么您没有使用托管代码,这些设置不相关。

本机代码构建模型需要DLL的导入库。一个.lib文件。它只是一个小的,只包含DLL的导出列表。否则链接器无法直接读取DLL。您需要使用链接器,输入,附加依赖项设置来告诉链接器除了您自己的.obj文件之外还需要链接什么。您可以拼出.lib的全名,也可以只使用短名称并使用Additional Library Directories设置来帮助链接器找到.lib文件。

首先找到为DLL生成的.lib文件。它将与.dll位于同一目录中。如果项目在同一解决方案中,则复制到解决方案的Debug目录。如果您没有看到它,则忘记使用__declspec(dllexport)导出函数。通过在生成的DLL上运行Dumpbin.exe / exports进行仔细检查,它会显示导出函数的列表。只需一个EXE和一个DLL项目,就可以在一个非常小的测试解决方案上尝试这一切。

答案 1 :(得分:0)

“为什么?”的答案可能就像您在DLL项目中为主项目添加的依赖这样简单。

在visual studio 2008中,可以在Project Dependencies找到设置,只需取消选中DLL项目即可解决问题。

此外,您可以验证:DLL'Lib'的路径不再包含在主项目的“链接器”命令行中:Configuration Properties > Linker > Command Line