我在VS2005中有一个VC ++项目,如下所示:
控制台引用了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.DLL
和LIB3.DLL
的引用,而不是LIB1.DLL
所有三个DLL项目编译正常。
链接错误:
Fatal error LNK1104: cannot open file '..\debug\boostlib1.lib
**为什么链接器要查找lib文件(即lib1.lib)而不是lib1.dll
这是某种类型的路径问题吗?
为什么我在Config\Props\Debugging\Environment\Macros\References
中没有看到lib1的引用?
注意:
答案 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