Ошибка компиляции кода C с использованием MinGW-w64 в Windows 7

Я пытаюсь скомпилировать код из проекта обратной трассировки https://code.google.com/p/backtrace-mingw/, который написан для MinGW, но с использованием MinGW-w64.

Моя старая установка и новая установка MinGW-w64 вызывают ту же проблему. Путь задается в переменных пути, а также в командной строке:

C: \ mingw-w64 \ i686-4.9.2-win32-sjlj-rt_v3-rev1 \ mingw32 \ bin

и C: \ mingw-w64 \ i686-4.9.2-win32-sjlj-rt_v3-rev1 \ mingw32, хотя он не нужен.

Это make-файл этого проекта:

.PHONY: all clean

all : backtrace.dll test.exe

backtrace.dll : backtrace.c
    gcc -O2 -shared -Wall -o $@ $^ -lbfd -lintl -liberty -limagehlp

test.exe : test.c
    gcc -g -Wall -o $@ $^

clean :
    -del -f backtrace.dll test.exe

При компиляции получаю предупреждение:

backtrace.c: 23: 17: фатальная ошибка: bfd.h: нет такого файла или каталога #include ‹bfd.h>`

Что странно, потому что этот файл существует в папке ../mingw32/include.

Если я добавлю это при компиляции dll: -IC: \ mingw-w64 \ i686-4.9.2-win32-sjlj-rt_v3-rev1 \ mingw32 \ include, он продолжится, но остановится на директиве: < em> #error config.h должен быть включен перед этим заголовком, а config.h отсутствует в MinGW-w64

Любые идеи?


person reader    schedule 23.02.2015    source источник


Ответы (2)


Этот путь явно отсутствует в gcc include paths в mingw. Не знаю почему. Вы должны добавить его сами, как хотите: рецепт cmake, рецепт autoconf, CFLAGS, CPATH, спецификации gcc.

И, насколько я помню, он использует только макрос HAVE_STRINGIZE из config.h и используется только для определения макроса CONCAT4, который нигде не используется в bfd.h. Так что можно немного схитрить и поставить

#define PACKAGE package

перед включением bfd.h

person Alexey Voinov    schedule 02.06.2015

добавьте это в конец оператора компиляции:

-I./mingw32/include

так что весь оператор компиляции будет таким:

gcc -g -Wall -o $@ $^ -I./mingw32/include

поэтому компилятор знает, где найти включаемые файлы

person user3629249    schedule 23.02.2015
comment
Это не помогает. Проблема в dll, я уже пробовал именно это, смотрите вопрос. - person reader; 23.02.2015