Как подключить curses-подобную библиотеку?
Платформа Windows 10. Хочу поработать с curses-подобной библиотекой, но возникли проблемы. Не получается их подключить.
Через MinGW установил GCC, make, ncurses, pdcurses, gdb.
Пытаюсь сначала работать через Visual Studio, устанавливаю библиотеки из NuGet, но как подключить её не пойму
#include <ncurses.h>
Строка подчеркивается красным курсивом. Соответственно она не подключена.
Если я работаю с VS Code, то строка также красная. Указал путь в c/c++ расширении до компилятора, стандартные библиотеки заработали, curses нет.
Пытался через msys2, тоже не получается.
1.Как подключить curses-подобные библиотеки? Желательно через gcc, а не компилятор VC++(если он так правильно называется)
2.Есть ли способ поменять компилятор в Visual Studio, или он залочен на VC++?(менее важный)
Спасибо.
Ответы (1 шт):
Не смешивайте MinGW и VS, библиотеки от одного чаще всего не совместимы с другим.
Пытался через msys2
Для начала, прочитайте What are MSYS2 environments? How do I pick one?. Я буду использовать UCRT64, но для других должно быть аналогично.
Ищем библиотеку: pacman -Ss curses
Видим:
mingw-w64-ucrt-x86_64-curses
mingw-w64-ucrt-x86_64-ncurses
mingw-w64-ucrt-x86_64-pdcurses
Гуглеж подсказывает, что в MSYS2 первое - синоним третьего (смотрим в "provides"), и что третье - лучше чем второе.
Ставим: pacman -S mingw-w64-ucrt-x86_64-pdcurses
.
Теперь пробуем собрать hello world.
#include <pdcurses.h>
int main(int argc, char *argv[])
{
initscr();
printw("Hello World !!!");
refresh();
getch();
endwin();
return 0;
}
Смотрим список файлов в пакете. Там нет .pc-файла, поэтому не получится использовать pkgconf
, чтобы автоматически, не думая, получить правильные флаги компилятора.
Видим несколько .a-файлов, из которых нужно выбрать. (А вот и мануал.) Пробуем каждый:
g++ 1.cpp -lpdcurses
- открывает свое окно, которое выглядит как простенькая консольg++ 1.cpp -lpdcurses_vt
- пытается что-то печатать в обычную консоль, но у меня в wine нормально не заработал.g++ 1.cpp -lpdcurses_wincon -lwinmm
- печатает в консоль (откуда взялся-lwinmm
- сначала пробуем без него, видим ошибкуundefined reference to PlaySoundW
- открываем мануал - там видимLibrary - Winmm.lib
- подставляем-lwinmm
, ошибка пропадает)g++ 1.cpp -lpdcurses_wingui -lgdi32 -lwinmm -lcomdlg32
- аналогично первому (флаги подбирал как в предыдущем пункте)
В итоге, wincon выглядит лучше всего.
Если захотите сделать то же самое на Visual Studio, я бы использовал vcpkg. (Теоретически vcpkg и с MinGW кое-как работает, но привязываться к нему выглядит странно - все-таки он больше для VS, MinGW там для галочки, насколько я понимаю.)
Есть еще Conan, который должен работать и с MinGW, и с VS.
NuGet - это какой-то странный зверь, я не видел, чтобы им пользовались для С++.
2.Есть ли способ поменять компилятор в Visual Studio, или он залочен на VC++?
Там можно легко можно поставить Clang (в режиме совместимости с MSVC (то что вы называете "VC++")).
Способ поставить другие-то может и есть, но зачем? Если не используете MSVC, то я бы не привязывался с продуктам MS (по крайней мере не-кроссплатформенным и не-опенсурсным). Я бы посоветовал VSCode (с Clangd вместо дефолтного C++-плагина - во-первых опенсорс, во-вторых работает лучше). Потом будет легче мигрировать на другую ОС, и опенсорс не превратится неожиданно в тыкву от санкций и прочего.