CMake项目中包含Windows库

时间:2012-03-13 16:35:05

标签: c++ winapi dll cross-platform

我在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中我可以利用它来使这更容易。

2 个答案:

答案 0 :(得分:1)

从我能够通过一些帮助和一些谷歌获得的,一个解决方案确实是在_interlockedbittestandset

中评论initrin.h的重复定义

这可能已在Visual Studio的更高版本中修复。

答案 1 :(得分:1)

您可以查看CMake的源代码,有一个C ++类可以跨平台库加载。它是BSD风格的许可证,因此您只需复制代码即可。适用于许多平台。代码在这里:

http://cmake.org/gitweb?p=cmake.git;a=blob;f=Source/kwsys/DynamicLoader.cxx;h=c4ee095519fe27742a0a9a9e392be4ce095af423;hb=HEAD