Включение библиотеки Windows в проект CMake - PullRequest
0 голосов
/ 13 марта 2012

У меня есть развивающийся проект в CMake. Пора ссылаться на библиотеку, которая на данный момент существует только в Windows, функциональность Linux придется подождать. Я пытаюсь сделать это с помощью директив препроцессора, как рекомендовано в ответе на этот вопрос :

// 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: вторая связь C перегруженной функции _interlockedbittestandset не разрешена

Ошибка повторяется четыре раза, дважды в intrin.h и дважды в winnt.h. Итак, вот мой вопрос. Существуют ли другие шаги включения или препроцессора, которые мне нужно предпринять, чтобы заставить это работать внутри Windows (до сих пор это было базовое консольное приложение), и есть ли в CMake что-то, что я могу использовать, чтобы сделать это проще.

Ответы [ 2 ]

1 голос
/ 15 марта 2012

Вы можете посмотреть исходный код CMake, есть класс C ++, который выполняет межплатформенную загрузку библиотеки. Это лицензия в стиле BSD, поэтому вы можете просто скопировать код. Работает на многих платформах. Код здесь:

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

1 голос
/ 13 марта 2012

Из того, что мне удалось разобрать с помощью некоторой помощи и некоторого Google, одно решение действительно состоит в том, чтобы закомментировать дубликаты определений _interlockedbittestandset в initrin.h

Возможно, это было исправлено вболее поздние версии Visual Studio.

...