无法链接简单的DLL解决方案

时间:2014-08-13 07:05:25

标签: c++ dll

我尝试在Visual Studio 2013中创建简单的dll项目,就像在http://www.itcsolutions.eu/2009/12/10/how-to-create-a-dll-dynamic-link-library-in-c-as-visual-studio-2008-project/

中一样

但是当我尝试构建解决方案时,它会出现错误:

error LNK1104: can not open file "D:\prj\dlltest1\Debug\dlltest1.lib"   D:\prj\dlltest1\ConsoleApplication1\LINK    ConsoleApplication1

但是dlltest1是dll-project。为什么有.lib文件?

2 个答案:

答案 0 :(得分:0)

更新:没有生成库因为没有导出符号的原因。我刚检查了你的代码。 您应该有一个* .h文件来定义这样的导出符号。

#ifdef WIN32PROJECT1_EXPORTS
#define WIN32PROJECT1_API __declspec(dllexport)
#else
#define WIN32PROJECT1_API __declspec(dllimport)
#endif WIN32PROJECT1_API int fnWin32Project1(void);
  1. 创建DLL项目时,它有一些其他项目可以使用的导出符号。这些符号的名称和偏移量存储在* .lib文件中。 * .lib文件是使用* .dll文件创建的,它们都放在输出目录中。
  2. 在ConsoleApplication的链接阶段,链接器尝试从所有引用的lib(在project属性中定义)中查找符号,并将这些符号的offset和source dll存储在输出exe文件中。
  3. 您可以在Property-> Linker
  4. 中更改libs设置

答案 1 :(得分:0)

Wikipedia说:

  

DLL编译将生成DLL和LIB文件。 LIB文件用于在编译时链接DLL;它不是运行时链接所必需的。

应用程序中的代码确定是否需要编译时或运行时链接:

如果您访问类似

的DLL函数
__declspec(dllimport) someFunction(int firstArg, int secondArg)

然后您的编译器将同时需要.dll和.lib文件来链接到共享库,但在执行期间,只需要.dll。

但是,如果您使用DLL函数LoadLibraryGetProcAddressFreeLibrary,则链接不需要.lib。