C++ 无法链接简单dll解决方案

C++ 无法链接简单dll解决方案,c++,dll,C++,Dll,我尝试在VisualStudio2013中创建简单的dll项目,就像 但当我尝试构建解决方案时,它会出现一个错误: error LNK1104: can not open file "D:\prj\dlltest1\Debug\dlltest1.lib" D:\prj\dlltest1\ConsoleApplication1\LINK ConsoleApplication1 但dlltest1是dll项目。为什么有一个.lib文件?已更新:因为没有导出符号,所以没有生成lib的原因。

我尝试在VisualStudio2013中创建简单的dll项目,就像

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

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

但dlltest1是dll项目。为什么有一个.lib文件?

已更新:因为没有导出符号,所以没有生成lib的原因。我刚查过你的密码。 您应该有一个*.h文件来定义这样的导出符号

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

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

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

    如果访问DLL函数,如

    __declspec(dllimport) someFunction(int firstArg, int secondArg)
    
    然后,编译器将需要.dll和.lib文件来链接到共享库,但在执行过程中,只需要.dll文件


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

    实际上,VS生成.lib和.DLL文件。.dll是运行时库,在运行时执行.exe应用程序时需要该库。如果要生成.exe应用程序,则需要.lib文件,但为什么VS没有生成适当的lib?如果生成了该文件,请更好地检查它,并在项目设置中相应地调整链接器路径