включение двух внешних библиотек приводит к ошибке dirent.h - PullRequest
0 голосов
/ 20 сентября 2019

Моя программа содержит два заголовка для внешних библиотек: nifti_io.h и CImg.h (загружено из здесь и здесь соответственно).Компилятор (GCC 8.2.0 внутри Code :: Blocks) возвратил эти странные ошибки в /usr/include/dirent.h - сообщения сборки в IDE:

g++ -Wall -fexceptions -O2 -c /tmp/image_test.cpp -o tmp/obj/Release/image_test.o
g++ -o bin/Release/image_test obj/Release/image_test.o -s ../z/libz.so ../znz/bin/Release/libznz.so ../nifti/bin/Release/libnifti.so
In file included from /usr/include/nifti/nifti1_io.h:18,
             from /tmp/image_test.cpp:4:
/usr/include/dirent.h:99:5: error: expected identifier before numeric constant
     DT_UNKNOWN = 0,
     ^~~~~~~~~~
/usr/include/dirent.h:99:5: error: expected ‘}’ before numeric constant
In file included from /tmp/CImg.h:173,
             from /tmp/image_test.cpp:7:
/usr/include/dirent.h:98:3: note: to match this ‘{’
   {
   ^
In file included from /usr/include/nifti/nifti1_io.h:18,
             from /tmp/image_test.cpp:4:
/usr/include/dirent.h:99:5: error: expected unqualified-id before numeric constant
     DT_UNKNOWN = 0,
     ^~~~~~~~~~
In file included from /usr/include/features.h:424,
             from /usr/include/x86_64-linux-gnu/bits/libc-header-start.h:33,
             from /usr/include/stdio.h:27,
             from /usr/include/nifti/nifti1_io.h:9,
             from /tmp/image_test.cpp:4:
/usr/include/dirent.h:402:1: error: expected declaration before ‘}’ token
 __END_DECLS
 ^~~~~~~~~~~
Process terminated with status 1 (0 minute(s), 0 second(s))
4 error(s), 0 warning(s) (0 minute(s), 0 second(s))

После буквального комментирования всего (все, что делает программа послевключая эти библиотеки int main() { return (0); }) ошибка все еще остается.

#include "nifti/nifti1_io.h"
#include "CImg.h"
int main() { return ( 0 ); }

Включая только одну из них (nifti1_io.h или CImg.h), компилирующуюся без ошибок или предупреждений.Включение обоих из них возвращает вывод выше.

У кого-нибудь есть подсказка, что вызывает это и как его решить?Я предполагаю, что это как-то связано с директивами компилятора, особенно с директивой extern "C".Я хотел бы сохранить включенные заголовочные файлы без изменений, потому что они не мои.

...