Ошибка при компиляции с zlib 1.2.8 на windows

Я связываюсь с zlib 1.2.8 в своем приложении, созданном с помощью VS2012 и ICC 13.0. Когда я компилирую файл, в котором ‹ zlib.h > включен до ‹ windows.h >, проблем не возникает. Когда ‹ zlib.h > включается после ‹ windows.h >, я получаю сообщение об ошибке в ‹ zconf.h >, строка 454, где компилятор пытается включить ‹ unistd.h >. Хуже того, я поместил #pragma message() непосредственно перед этим #include, и сообщение не появилось в окне вывода сборки!

Я попробовал знаменитую WIN32_LEAN_AND_MEAN, но ничего не изменилось.

Есть ли у кого-нибудь идеи о решении этой проблемы?

Спасибо!


person dom_beau    schedule 26.06.2013    source источник
comment
У вас уже есть решение. Ставьте zlib.h раньше.   -  person Mark Adler    schedule 27.06.2013
comment
Привет Марк! Конечно, это может быть решением, но #include не нужно сортировать таким образом, не так ли? Где-то должен быть конфликт, и я хотел бы знать, что это такое. Если мне нужно включить zlib.h раньше, мне придется изменить много кода.   -  person dom_beau    schedule 27.06.2013
comment
Ах хорошо. Когда вы сказали, что проблем нет, я думал, вы имели в виду, что проблем нет.   -  person Mark Adler    schedule 27.06.2013


Ответы (1)


Хорошо, эта ошибка закрыта.

Проблема возникла из-за другой сторонней библиотеки, где макрос HAVE_UNISTD_H был определен ошибочно. Это определение не повлияло на эту библиотеку, но запретило компилировать с zlib.

Моя поправка заключалась в том, чтобы добавить

#undef HAVE_UNISTD_H

в zlib.h или в других файлах .h библиотеки.

person dom_beau    schedule 27.06.2013
comment
Или вы можете поместить его в свой исходный код между включениями. Вероятно, лучше не изменять предоставленные заголовочные файлы, так как вам придется не забыть изменить их снова, если вы получите новую версию. - person Mark Adler; 27.06.2013