как использовать ncurses.h на i686-w64-mingw32-g++
Я скачал ncurses с помощью этой команды:
sudo apt install libncurses-dev
А компилирую с помощью строки:
i686-w64-mingw32-g++ -Wall -g client.cpp -o client -static-libstdc++ -static-libgcc -lncurses -DNCURSES_STATIC -lncursesw
Мне выдает ошибку fatal error: ncurses.h: No such file or directory. Мне нужно обязательно использовать и mingw, и ncurses. Есть у кого-то идеи, как это сделать?
Ответы (1 шт):
Библиотеки компилируются для какой-то одной платформы за раз. Ваш sudo apt install libncurses-dev ставит ncurses, собранный для линукса, а не для винды/MinGW.
Его нужно скомпилировать через MinGW самому, или найти уже скомпилированный.
В комментариях дают вредные советы вручную указать путь до линуксовой библиотеки через -I - это не поможет. Допустим, хедеры таким образом найдутся, но линковка с библиотекой все равно не пройдет (даже если путь до библиотеки указать в -L - см. первый абзац).
Если дело происходит на Windows в WSL или другой виртуальной машине, то проще всего вместо этого поставить компилятор напрямую на винду. Кросс-компиляция всегда сложнее нативной. Либо поставить MSYS2, и поставить ncurses из их пакетного менеджера (тогда ощущения будут как на линуксе), либо поставить Visual Studio и поставить ncurses из vcpkg.
Пользуясь случаем, рекомендую свой quasi-msys2, который дает доступ к большому количеству уже скомпилированных библиотек для MinGW, взятых из MSYS2 (который сам по себе работает только винде).
Ставим зависимости:
sudo apt install make wget tar zstd gawk gpg gpgv wine # И свежий кланг: (либо взять более старый из стандартных репозиториев) bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)".Ставим сам quasi-msys2, и в нем ncurses:
git clone https://github.com/HolyBlackCat/quasi-msys2 cd quasi-msys2 make install _gcc _ncurses env/shell.shПробуем собрать первый попавшийся пример:
#include <ncurses.h> int main() { initscr(); printw("Hello, world!"); refresh(); getch(); endwin(); }win-clang++ 1.cpp -static `pkg-config --libs --cflags --static ncursesw`Как цивилизованные люди, узнаем правильные флаги из
pkg-config.
Еще, если с ncurses что-то не получится, советую посмотреть в сторону pdcurses (который тоже есть в пакетах MSYS2 и quasi-msys2).