我在CMake有一个不断增长的项目。现在是时候链接到一个库,此时只存在于Windows中,Linux功能必须等待。我试图使用预处理器指令执行此操作,如this question的答案中所建议的那样:
// MyLibHeader.hpp
#ifdef WIN32
#include <windows.h>
#define ProcHandle HINSTANCE
#define LoadLib LoadLibraryA
#define LoadSym GetProcAddress
#else
// ... I'll fill these in with dlopen etc. when necessary
这是我必须在我的代码中添加的第一个特定于平台的包含,而且它似乎还有更多。这会产生此错误:
C:\ Program Files(x86)\ Microsoft Visual Studio 8 \ VC \ include \ intrin.h(944):错误C2733:不允许重载函数'_interlockedbittestandset'的第二个C链接
错误重复四次,在intrin.h中重复两次,在winnt.h中重复两次。所以这是我的问题。我是否需要采取其他包含或预处理器步骤才能使其在Windows内部工作(到目前为止它已经是一个基本的控制台应用程序)并且在CMake中我可以利用它来使这更容易。
答案 0 :(得分:1)
从我能够通过一些帮助和一些谷歌获得的,一个解决方案确实是在_interlockedbittestandset
initrin.h
的重复定义
这可能已在Visual Studio的更高版本中修复。
答案 1 :(得分:1)
您可以查看CMake的源代码,有一个C ++类可以跨平台库加载。它是BSD风格的许可证,因此您只需复制代码即可。适用于许多平台。代码在这里: