Не линкуется статическая внешняя библиотека (pdcurses) в QT Creator, система сборки qmake
Я пытаюсь собрать небольшой тестовый проект в Qt Creator 5.0.3, и у меня возникла проблема при попытке подключить внешнюю статическую библиотеку PDCurses к этому проекту. Я работаю на Windows 10, библиотека была собрана из скачанных из интернета исходников через PowerShell с помощью mingw32-make и мейк-файла, являвшегося частью этих исходников.
Как и было описано в прилагавшемся README.md, результатом компиляции стал файл pdcurses.a, который, насколько мне известно, содержит функции, описанные в соответствующих .h-файлах. Главный среди них - curses.h, к которому подключаются curspriv.h и panel.h. Назначение последних двух я пока не очень понимаю, потому что я новичок в curses, но в curspriv.h указано, что это приватные функции для использования в pdcurses. panel.h, вероятно, нужен для рисования панелек и работы с ними.
Я следую нескольким инструкциям из интернета при попытке добавить все это в свой проект. Предпринятые мною шаги следующие:
Открываем QT Creator и создаем Проект с поддиректориями с системой сборки qmake. Не знаю, у всех ли так, но у меня только qmake позволяет создать проект с поддиректориями, и только проект с поддиректориями позволяет подключать к себе библиотеки.
Сразу же создаем подпроект, в main.cpp которого помещаем код. В моем случае это тривиальный код для проверки работоспособности библиотеки:
#include <curses.h>
int main()
{
initscr(); //запускаем курсис
endwin(); //убиваем курсис
return 0;
}
ВАЖНО! Систему сборки для подпроекта тоже нужно выбрать qmake, иначе подсоединить его как подпроект к нашему проекту с поддиректориями не получится.
Кликая правой кнопкой мыши по головной папке проекта с поддиректориями, выбираем Add Library/Добавить библиотеку.
Далее выбираем вариант Внешняя библиотека и идем прописывать пути.
Прописываем пути к .а-файлу и к папке, где лежат .h-файлы. Я использую mingw64, поэтому я поместила файлы с mingw64\x86_64-w64-mingw32\lib и в mingw64\x86_64-w64-mingw32\include. Я также добавила пути к этим папкам в Path, хотя, честно говоря, точно не знаю, как это работает. Мне также пришлось переименовать pdcurses.a в libpdcurses.a под требования системы подключения библиотек QT Creator'а, но это вроде бы не играет роли.
Снимаем галочки с Linux и Mac, а также с "добавить суффикс d для отладочной версии", выбираем вид библиотеки "статическая" и подтверждаем прикрепление.
В итоге в .pro-файле проекта с поддиректориями появляется примерно такой текст:
TEMPLATE = subdirs
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/'../../../../Program Files/mingw64/x86_64-w64-mingw32/lib/' -lpdcurses
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/'../../../../Program Files/mingw64/x86_64-w64-mingw32/lib/' -lpdcursesd
else:unix:!macx: LIBS += -L$$PWD/'../../../../Program Files/mingw64/x86_64-w64-mingw32/lib/' -lpdcurses
INCLUDEPATH += $$PWD/'../../../../Program Files/mingw64/x86_64-w64-mingw32/include'
DEPENDPATH += $$PWD/'../../../../Program Files/mingw64/x86_64-w64-mingw32/include'
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/'../../../../Program Files/mingw64/x86_64-w64-mingw32/lib/libpdcurses.a'
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/'../../../../Program Files/mingw64/x86_64-w64-mingw32/lib/libpdcursesd.a'
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/'../../../../Program Files/mingw64/x86_64-w64-mingw32/lib/pdcurses.lib'
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/'../../../../Program Files/mingw64/x86_64-w64-mingw32/lib/pdcursesd.lib'
else:unix:!macx: PRE_TARGETDEPS += $$PWD/'../../../../Program Files/mingw64/x86_64-w64-mingw32/lib/libpdcurses.a'
SUBDIRS += \
cursedtest2
Исходя из моих знаний об этом, эти инструкции рассказывают qmake'у о подключенной либе и дает ссылки на то, где ее искать, а также о подпроекте, в котором содержится вышеуказанный код (здесь этот проект называется cursedtest2). #include<curses.h> не подчеркивается красным в редакторе, то есть библиотеку он видит. Также мы, по идее, не нуждаемся в ранее упомянутых curspriv.h и panel.h, хотя они и лежат на всякий случай в той же директории, что и curses.h. К проекту я их в явном виде не подключала, но функции initscr() и endwin() объявлены в curses.h, так что по меньшей мере они должны работать и так, в моем понимании. Теперь, по идее, это все должно без проблем собираться через QT Creator, но на деле мы получаем вот такую ошибку:
undefined reference to 'initscr'/'endwin'
Знающий человек сказал, что эта ошибка обусловлена тем, что линковщик не находит необходимый .а файл, и поэтому функции, объявленные в curses.h, оказываются на деле недоступны. Собственно, вопрос, отчего такое может происходит и как это пофиксить. Я не уверена, что можно прикреплять сюда левые ссылки, но если понадобится, я могу предоставить архив с исходниками библиотеки. Надеюсь на Вашу помощь и снисходительность, если вопрос вдруг очевиден, потому что я потратила два дня и не смогла исправить это. Заранее спасибо!