无法链接简单的DLL解决方案
cannot link simple dll solution
我尝试在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);
- 当你创建一个DLL项目时,它有一些其他项目可以使用的导出符号。这些符号的名称和偏移量存储在*中。lib文件。*。lib文件是用*.dll文件创建的,它们都放在输出目录中。
- 在您的ConsoleApplication的链接阶段,链接器尝试从所有引用的库(在项目属性中定义)中找到符号,并将这些符号的偏移量和源dll存储在输出exe文件中。
- 您可以在属性->链接器 中更改库设置。
维基百科说:
DLL编译将同时生成DLL和LIB文件。LIB文件用于在编译时链接到DLL;运行时链接不需要。
应用程序中的代码决定是否需要编译时链接或运行时链接:
如果您访问DLL函数,如
__declspec(dllimport) someFunction(int firstArg, int secondArg)
那么你的编译器将需要。dll和。lib文件链接到共享库,但在执行过程中,只需要。dll文件。
如果您使用DLL函数LoadLibrary
, GetProcAddress
和FreeLibrary
,则不需要链接。lib。
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- Dll在同一解决方案中从 c# 项目导入到 c++ 项目
- C++ VS:多 DLL 解决方案中的'new'和'delete'覆盖
- 通过COM从C 解决方案进行调试C#DLL
- 在DLL中使用的最简单的C++PUSH通知/POST解决方案
- C# COM-Interop dll for C++ COM dll 在 2 个解决方案之间不起作用
- 尝试在与我的 EXE 项目相同的解决方案中引用 DLL 项目时,出现错误"无法打开包含文件:"iostream"
- 本机C++dll与C#项目在一个解决方案中
- 如何将visual studio 2010解决方案构建为独立的dll
- 无法链接简单的DLL解决方案
- c# / c++在相同的解决方案- DllImport找不到DLL
- LNK2019关于dll项目的解决方案
- 将属性更改应用于解决方案中的所有DLL项目
- C++ 一个解决方案两个项目(EXE & DLL)链接错误
- 从相同的解决方案在Win32项目中使用DLL项目
- 在多项目解决方案中使用非托管DLL的vc++项目在构建时导致链接错误
- 未修改的DLL速度在加载整个解决方案时变化
- 如何在visual studio 2010中重命名解决方案和dll
- 无法在调试模式下编译解决方案,因为缺少MSVCR100D.dll