Ошибка построения GLEW с помощью MinGW-64 в MSYS2 — ошибка создания: i686-w64-mingw32-ld: команда не найдена

#gcc #build #mingw #glew #msys2

#gcc #сборка #mingw #glew #msys2

Вопрос:

Я новичок во всем этом. Папка GLEW находится на моем диске Windows, и я пытаюсь создать ее с помощью MinGW-w64 из MSYS2 для использования в программе OpenGL. Новая установка MSYS2 полностью обновлена и выполняется с /MSYS2/mingw32.exe . Единственными дополнительными пакетами, установленными в MSYS2, являются git, mingw-w64-x86_64-gcc и base-devel.

 $ make SYSTEM=linux-mingw-w64
i686-w64-mingw32-gcc -DGLEW_NO_GLU -DGLEW_BUILD -O2 -Wall -W -Iinclude -fno-builtin -fno-stack-protector  -o tmp/linux-mingw-w64/default/shared/glew.o -c src/glew.c
i686-w64-mingw32-ld -shared -soname libglew32.dll --out-implib lib/libglew32.dll.a     -o lib/glew32.dll tmp/linux-mingw-w64/default/shared/glew.o -nostdlib -lopengl32 -lgdi32 -luser32 -lkernel32
make: i686-w64-mingw32-ld: Command not found
make: *** [Makefile:122: lib/glew32.dll] Error 127
 

В Windows я могу искать и находить i686-w64-mingw32-gcc.exe находится в MSYS2mingw32bin , но i686-w64-mingw32-ld нигде не найден в MSYS2

Если я введу только «make», который, как я думаю, использует другую опцию SYSTEM =, я получу это:

 $ make
gcc -fno-builtin -DGLEW_NO_GLU -DGLEW_BUILD -O2 -Wall -W -Iinclude -fno-builtin -fno-stack-protector  -o tmp/mingw/default/shared/glew.o -c src/glew.c
gcc -shared -Wl,-soname,libglew32.dll -Wl,--out-implib,lib/libglew32.dll.a    -o lib/glew32.dll tmp/mingw/default/shared/glew.o -L/mingw/lib -nostdlib -lopengl32 -lgdi32 -luser32 -lkernel32
strip -x lib/glew32.dll
sed 
        -e "s|@prefix@|/usr|g" 
        -e "s|@libdir@|/usr/lib|g" 
        -e "s|@exec_prefix@|/usr/bin|g" 
        -e "s|@includedir@|/usr/include/GL|g" 
        -e "s|@version@|2.1.0|g" 
        -e "s|@cflags@||g" 
        -e "s|@libname@|glew32|g" 
        -e "s|@requireslib@|glu|g" 
        < glew.pc.in > glew.pc
gcc -fno-builtin -DGLEW_NO_GLU -DGLEW_STATIC -O2 -Wall -W -Iinclude -fno-builtin -fno-stack-protector  -o tmp/mingw/default/static/glew.o -c src/glew.c
ar rv lib/libglew32.a tmp/mingw/default/static/glew.o
a - tmp/mingw/default/static/glew.o
C:MSYS2mingw32binar.exe: creating lib/libglew32.a
strip -x lib/libglew32.a
gcc -fno-builtin -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -fno-builtin -fno-stack-protector  -o tmp/mingw/default/shared/glewinfo.o -c src/glewinfo.c
gcc -fno-builtin -O2 -Wall -W -Iinclude -fno-builtin -fno-stack-protector -o bin/glewinfo.exe tmp/mingw/default/shared/glewinfo.o -Llib  -lglew32 -L/mingw/lib -nostdlib -lopengl32 -lgdi32 -luser32 -lkernel32
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x33): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x54): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x5c): undefined reference to `strlen'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x90): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0xb8): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0xed): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x109): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x111): undefined reference to `strlen'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x12d): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x152): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x187): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1a4): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1ac): undefined reference to `strlen'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1dc): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1e9): undefined reference to `fflush'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1e46e): undefined reference to `sscanf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1e492): undefined reference to `strcmp'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1e4aa): undefined reference to `strcmp'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1e4c9): undefined reference to `strcmp'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1e500): undefined reference to `strcmp'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1e51f): undefined reference to `strcmp'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1e544): more undefined references to `strcmp' follow
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1e596): undefined reference to `strtol'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1e5b5): undefined reference to `strcmp'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1e5df): undefined reference to `strcmp'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1e620): undefined reference to `memset'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x1e716): undefined reference to `memset'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text 0x142): undefined reference to `fflush'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0x1d): undefined reference to `__main'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0x98): undefined reference to `fopen'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0xba): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0xcf): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0xe4): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0x10b): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0x127): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0x160): more undefined references to `fprintf' follow
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0x177d): undefined reference to `_imp____acrt_iob_func'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0x178f): undefined reference to `fclose'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0x17af): undefined reference to `_imp____acrt_iob_func'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0x17bf): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0x17d3): undefined reference to `_imp____acrt_iob_func'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0x17e3): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0x1808): undefined reference to `_imp____acrt_iob_func'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0x181c): undefined reference to `fprintf'
tmp/mingw/default/shared/glewinfo.o:glewinfo.c:(.text.startup 0x1838): undefined reference to `_imp____acrt_iob_func'
collect2.exe: error: ld returned 1 exit status
make: *** [Makefile:181: bin/glewinfo.exe] Error 1
 

Итак, в GLEW git рекомендуется исправить эту ошибку, чтобы я определенным образом изменил Makefile, что я и сделал. После этого, если я запускаю только «make», мои / lib будут созданы, но моих объектных файлов в /src там нет:

 $ make
gcc -fno-builtin -DGLEW_NO_GLU -DGLEW_BUILD -O2 -Wall -W -Iinclude -fno-builtin -fno-stack-protector  -o tmp/mingw/default/shared/glew.o -c src/glew.c
gcc -shared -Wl,-soname,libglew32.dll -Wl,--out-implib,lib/libglew32.dll.a    -o lib/glew32.dll tmp/mingw/default/shared/glew.o -L/mingw/lib -nostdlib -lopengl32 -lgdi32 -luser32 -lkernel32
strip -x lib/glew32.dll
sed 
        -e "s|@prefix@|/usr|g" 
        -e "s|@libdir@|/usr/lib|g" 
        -e "s|@exec_prefix@|/usr/bin|g" 
        -e "s|@includedir@|/usr/include/GL|g" 
        -e "s|@version@|2.1.0|g" 
        -e "s|@cflags@||g" 
        -e "s|@libname@|glew32|g" 
        -e "s|@requireslib@|glu|g" 
        < glew.pc.in > glew.pc
gcc -fno-builtin -DGLEW_NO_GLU -DGLEW_STATIC -O2 -Wall -W -Iinclude -fno-builtin -fno-stack-protector  -o tmp/mingw/default/static/glew.o -c src/glew.c
ar rv lib/libglew32.a tmp/mingw/default/static/glew.o
a - tmp/mingw/default/static/glew.o
C:MSYS2mingw32binar.exe: creating lib/libglew32.a
strip -x lib/libglew32.a
gcc -fno-builtin -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -fno-builtin -fno-stack-protector  -o tmp/mingw/default/shared/glewinfo.o -c src/glewinfo.c
gcc -fno-builtin -O2 -Wall -W -Iinclude -fno-builtin -fno-stack-protector -o bin/glewinfo.exe tmp/mingw/default/shared/glewinfo.o -Llib -lglew32 -L/mingw/lib  -lopengl32 -lgdi32 -luser32 -lkernel32
strip -x bin/glewinfo.exe
gcc -fno-builtin -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -fno-builtin -fno-stack-protector  -o tmp/mingw/default/shared/visualinfo.o -c src/visualinfo.c
gcc -fno-builtin -O2 -Wall -W -Iinclude -fno-builtin -fno-stack-protector -o bin/visualinfo.exe tmp/mingw/default/shared/visualinfo.o -Llib -lglew32 -L/mingw/lib  -lopengl32 -lgdi32 -luser32 -lkernel32
strip -x bin/visualinfo.exe
 

Если я запускаю «make SYSTEM = linux-mingw-w64» после рекомендуемого исправления, он выдает ту же ошибку, что и раньше, и ничего не создается. Я хочу выполнить сборку с использованием этой опции, поскольку я собираюсь компилировать свой проект OGL, который требует GLEW, используя 32-разрядную версию MinGW-w64.

Вопросы:

  1. Почему отсутствует i686-w64-mingw32-lb и как я могу его получить?
  2. Почему «make» без флага SYSTEM= не может встроить файлы .o в /src, но не выдает ошибок?

Комментарии:

1.У вас есть 32-разрядные целевые двоичные файлы MinGW32. Более подробная информация о sourceforge.net/p/mingw-w64/wiki2/GeneralUsageInstructions (вы можете увидеть там обе цепочки инструментов). SYSTEM= делает цель 64-битной. ошибка сборки связана с тем, что у вас нет 32-разрядной библиотеки хоста . Что касается файла, который не найден, возможно, некоторые каталоги не в $ {PATH} или установка повреждена?

2. Я в замешательстве. Вот несколько вопросов для новичков: 1. Что означает «целевой» двоичный файл? 2. Флаг «SYSTEM =» по своей сути приводит к тому, что цель (независимо от цели) должна быть 64-разрядной? 3. Что такое библиотека библиотеки хоста? Что такое libc? Я могу погуглить их, но я не могу понять их описания в этом контексте … 4. Файл не найден… Я думал, вы сказали, что это потому, что я использовал неправильные целевые двоичные файлы или что-то в цепочке инструментов… кроме того, если бы я выбрал другую сборку по этой ссылке, была бы она 32-разрядной или 64-разрядной? Эти версии gcc устарели (2013), должен ли я «установить» и обновить их?