库、DLL和.h文件
Libs ,DLLs and .h files
我是一个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
所有这些attribute
、unused
、__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的同一目录中。
这个问题的答案可能会帮助你更好地理解。
- 挂起和取消挂起一个文件DLL
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 在 Windows 上,是否可以让 dll 在不使用 PATH 环境变量的情况下在另一个文件夹中查找依赖项?
- 加载与引用 .NET DLL 位于同一文件夹中的引用的 .NET DLL 时"Not found"异常
- 将 dll 文件注入 UWP
- 加载"D:UsersPublicDocumentsopencvbuildx64vc14binopencv_world340d.dll",找不到或打开PDB文件
- CMake 生成的 MSVC 项目找不到符号,即使为其相关 dll 正确生成了 lib 文件也是如此
- 错误:当我从"WinDbg"打开可执行文件时,找不到符号文件。默认导出 ntdll 的符号.dll
- 在使用 Clang 编译 DLL 时指定 DEF 文件
- 从 .lib 文件创建一个.dll文件
- 可执行文件C++包括.obj,.lib和.dll吗?
- python37.dll在可执行文件中未链接
- 链接器找不到导入的 DLL 的 LIB 文件
- DLL:当 SDK 头文件不使用 __declspec(dllexport) 时,我可以使用它吗
- sf::Windows上的音乐:api-ms-win-crt-locale-l1-1-0.dll:无法打开共享对象文件
- 如何在 CMake 超级生成中查找 dll/so 文件
- 在任何平台上执行任何Qt5应用程序的重要dll文件是什么(运行时文件dll)
- 在C++的应用程序中包括文件(dll,txt等.exe
- 反编译文件.dll
- 另一台电脑上的C++程序所需的文件/DLL