在链接方面有一些我不理解的事情......我正在使用第三方库(GEOS库)编写程序.此程序依赖于geos.lib但仍需要运行geos.dll.
我读了这个问题,我想我理解静态库和动态库之间的区别.我不明白的是为什么我静态链接库时仍然需要一个dll.
在Visual C++中,当我构建一个dll时,输出文件是.dll和.lib.
是.lib文件中内置的dll的名称.
我问这个问题的原因是:当我通过导入这个dll并运行exe来构建我的exe时,exe会尝试找到dll以将其加载到进程地址空间中.
由于我们只是在项目属性中指定库名(.lib文件),因此exe如何知道dll的名称.
注意:我在dumpbin libary文件(.lib)中看到它不包含dll的名称.
我有6个静态库项目:-
- Math
- ECS             : depends on Math
- Utility         : depends on ECS
- Physics         : depends on Utility         
- Graphics        : depends on Utility     
- BaseGame        : depends on Physics and Graphics         
- Some game (.exe): depends on BaseGame      
(The "depends" here is transitive e.g. BaseGame also depends on ECS.)    
我通过“静态库”技术成功使用了6个项目。
今天,我听说动态库可以减少编译时间(我们不讨论这是否成立),
因此我阅读了以下链接,并成功创建了一个小演示。    
这是我的测试演示中的一些代码:
#ifdef SomeName1_EXPORTS
#define SomeMacro1 __declspec(dllexport) 
#else
#define SomeMacro1 __declspec(dllimport) 
#endif
SomeMacro1 void someFunction(int someParam);
现在,是将其应用于我的实际项目的激动人心的时刻。 …
我正在使用tinyxml库来解析项目中的XML文件.当我尝试定位x64平台时,我得到了LINKER错误,这里有一个错误:
错误4错误LNK2001:未解析的外部符号"private:static struct TiXmlString :: Rep TiXmlString :: nullrep_"(?nullrep_ @ TiXmlString @@ 0URep @ 1 @ A)ClassThatUsesTinyXML.obj
更新:我认为没有安装x64版本的tinyxml,但是当我尝试为x64平台构建库时,我遇到了这个错误:
LNK1561: entry point must be defined
我正在创建一个CLI项目来包装现有的本机c ++项目(同一个解决方案文件中的两个独立项目).我想在托管类中包含一个指向本机类的指针作为成员.从我在线阅读的文档中,如果托管代码和非托管代码在同一个项目中,则可以完成此操作.如果本机代码和托管代码位于不同的项目中,那么唯一的选择是在两个项目之间使用dllimport和dllexport属性,并将本机代码类函数导出为静态函数.
这些是我唯一的选择,还是可以在两个单独的项目之间导入和导出整个本机类?我问,因为这决定了我如何设计我的托管包装器.提前致谢.
在C++中,什么是.lib和.dll文件,它们是如何创建的,它们是否能够让用户访问.cpp文件中实现的功能而不实际拥有这些文件?
特别是,我编写了包含一些我希望给别人使用的类的代码,但我不想给它们包含我的实现的.cpp文件.
PS:我正在使用CodeBlocks.
我用VC++生成了一个*.dll.当我想使用它时,需要*.lib.但我找不到它.如何获得*.lib?谢谢.
c++ ×6
dll ×4
c++-cli ×1
c++17 ×1
deployment ×1
linkage ×1
linker ×1
managed ×1
mixed-mode ×1
tinyxml ×1
visual-c++ ×1
winapi ×1
wrapper ×1