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

cannot link simple dll solution

本文关键字:DLL 解决方案 简单 链接      更新时间:2023-10-16

我尝试在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:prjdlltest1Debugdlltest1.lib"   D:prjdlltest1ConsoleApplication1LINK    ConsoleApplication1

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

Updated:没有生成库的原因是因为您没有导出符号。我刚检查了你的代码。您应该有一个*.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的链接阶段,链接器尝试从所有引用的库(在项目属性中定义)中找到符号,并将这些符号的偏移量和源dll存储在输出exe文件中。
  3. 您可以在属性->链接器
  4. 中更改库设置。

维基百科说:

DLL编译将同时生成DLL和LIB文件。LIB文件用于在编译时链接到DLL;运行时链接不需要。

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

如果您访问DLL函数,如

__declspec(dllimport) someFunction(int firstArg, int secondArg)

那么你的编译器将需要。dll和。lib文件链接到共享库,但在执行过程中,只需要。dll文件。

如果您使用DLL函数LoadLibrary, GetProcAddressFreeLibrary,则不需要链接。lib。