库、DLL和.h文件

Libs ,DLLs and .h files

本文关键字:文件 DLL      更新时间:2023-10-16

我是一个C#程序员,这就是我迷失在这里的原因,这个项目声称已经为Windows编译了那个库https://soildgeo.codeplex.com/releases/view/108738

该文件夹包含Include、Lib64和Bin64文件夹。如果我没有错的话,我只需要将.lib文件复制到VC/lib文件夹和include-to-VC/include文件夹中的文件夹,这样我就可以开始针对这些API进行编码,它们出现在#include<>intellisense,但它们不会编译。我的问题是,我对整个过程的假设是否正确?如果没有,正确的步骤是什么?最后,我是否需要在任何时候使用Bin64文件夹中的Dlls?

我正在使用VS2013提前感谢

编辑

1> ------生成已启动:项目:PhysBAM测试,配置:调试x64------1> main.cpp1> C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\include\PhysBAM _Tools\Log\Log.h(163):错误C2146:语法错误:缺少";"在标识符">属性"之前1> C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\include\PhysBAM _Tools\Log\Log.h(163):错误C2530:"PhysBAM::Log::anonymous-namespace'::cout' : references must be initialized 1>C:Program Files (x86)Microsoft Visual Studio 12.0VCincludePhysBAM_ToolsLogLOG.h(163): error C2065: 'unused' : undeclared identifier 1>C:Program Files (x86)Microsoft Visual Studio 12.0VCincludePhysBAM_ToolsLogLOG.h(163): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>C:Program Files (x86)Microsoft Visual Studio 12.0VCincludePhysBAM_ToolsLogLOG.h(163): error C2143: syntax error : missing ';' before '=' 1>C:Program Files (x86)Microsoft Visual Studio 12.0VCincludePhysBAM_ToolsLogLOG.h(164): error C2146: syntax error : missing ';' before identifier '__attribute__' 1>C:Program Files (x86)Microsoft Visual Studio 12.0VCincludePhysBAM_ToolsLogLOG.h(164): error C2530: 'PhysBAM::LOG::匿名命名空间"::cerr":必须初始化引用1> C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\include\PhysBAM _Tools\Log\Log.h(164):错误C2065:"未使用":未声明的标识符1> C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\include\PhysBAM _Tools\Log\Log.h(164):错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认的int1> C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\include\PhysBAM _Tools\Log\Log.h(164):错误C2374:"PhysBAM::Log::anonymous-namespace'::__attribute__' : redefinition; multiple initialization 1> C:Program Files (x86)Microsoft Visual Studio 12.0VCincludePhysBAM_ToolsLogLOG.h(163) : see declaration of 'PhysBAM::LOG::匿名命名空间"::属性'1> C:\Program Files(x86)\Microsoft Visual Studio 12.0\VC\include\PhysBAM _Tools\Log\Log.h(164):错误C2143:语法错误:缺少";"在'='之前==========生成:0成功,1失败,0最新,0跳过==========

编辑

在根据下面的答案添加了WIN32宏之后,这次出现了链接器错误

错误1错误LNK2019:未解析的外部符号"class std::basic_stream>&__cdecl PhysBAM::LOG::cout_Helper(void)"(?cout_Helper@LOG@PhysBAM@@YAAEAV$basic_ostream@DU$char_traits@D@std@@std@@XZ)在函数"void __cdecl PhysBAM::LOG::anonymous namespace'::"cout"(void)的动态初始值设定项"中引用(??__Ecout@?A0x5bbeb782@LOG@PhysBAM@@YAXXZ)C:\Users。。。\Documents\Visual Studio 2013\Projects\PhysBAM Test\PhysBAM Test\main.obj PhysBAM Test

所有这些attributeunused__attribute__都是一些人所说的GNU ishms,即GCC兼容编译器(GCC本身、Clang、ICC和其他编译器)特有的功能。但是MS VC并不以GCC兼容性为目标,所以它们根本不起作用。

我认为,在文件Utilities/PHYSBAM_OVERRIDE.h中,那些将端口连接到Windows的人通过使用一些预编译器技巧成功地删除了这些构造。但要使这些工作,您必须定义宏WIN32。在项目"C/C++预处理器设置"页面中执行此操作,而不是在代码中,因此它将同时为所有源文件定义。

或者,该IMO将是正确的解决方案,修补源,并用#ifdef _WIN32替换每次出现的#ifdef WIN32#if defined(WIN32)。宏_WIN32总是在Win32和Win64中预定义的,但WIN32不是。

好吧,从技术上讲,如果问题是关于Windows系统或MSVC编译器(有一个适用于Windows的GCC编译器),你必须区分每次出现的情况。然后使用_WIN32作为系统依赖项,使用_MSC_VER作为编译器依赖项。

然后,如果你喜欢,可以向Codeplex项目发送一个补丁。

更新

关于链接器错误,应该很容易修复:只需将必要的"*.lib"文件添加到项目中。您可以将它们添加到项目的链接器属性页中。

除了您对.lib和.h所做的操作外,您还需要将.dll保存在System32目录中,或者保存在拥有exe的同一目录中。

这个问题的答案可能会帮助你更好地理解。