2015-09-28 2 views
0

У меня есть библиотека, которая использует библиотеку mysql (libmysqlclient) для linux, которую я переношу в окна, но, похоже, я столкнулся с проблемой, с которой расположены файлы заголовков. Под Linux заголовки расположены под /usr/include/mysql (по крайней мере, для Debian), так со стандартной включают путь, который они будут включены как:Как переносимые заголовки mysql

#include <mysql/mysql.h> 

Однако при установке библиотеки под окнами главного заголовка, кажется, находится в c:\Program Files\MySQL\MySQL Connector C 6.1\include\mysql.h, который бы требует, чтобы быть включено как:

#include <mysql.h> 

Мне нужно построить его для прошивки, а также, но в данный момент я не знаю, где файлы заголовки будут находиться там.

Каков нормальный способ решить эту проблему? Должен ли я добавить /usr/include/mysql в путь включения под Linux? Разве это не открыло бы для большей вероятности столкновения имени заголовка?

ответ

1

Вы можете определить, на какой платформе вы работаете, проверив предопределенный символ. Есть несколько списков таких макросов, плавающих вокруг; вот один:

http://nadeausoftware.com/articles/2012/01/c_c_tip_how_use_compiler_predefined_macros_detect_operating_system

Затем вы можете #include другой путь в зависимости от платформы:

#if defined(_WIN32) || defined(_WIN64) 
# include <mysql.h> 
#elif defined(__linux) 
# include <mysql/mysql.h> 
#elif defined(__APPLE__) 
# include <whatever path works on iOS> 
#else 
# error Unrecognized platform. 
#endif 

Если вам нужно сделать, это более чем в одном месте, а затем поставить его в один ваших собственных файлов include и #include, которые затем будут # включать верный mysql.h по очереди.

Другой вариант, как вы уже сказали, заключается в том, чтобы указать путь включения на каждой платформе, чтобы #include <mysql.h> works. Какой из них вы используете, это вопрос вкуса.

Смежные вопросы