Не линкуется статическая внешняя библиотека (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, вероятно, нужен для рисования панелек и работы с ними.

Я следую нескольким инструкциям из интернета при попытке добавить все это в свой проект. Предпринятые мною шаги следующие:

  1. Открываем QT Creator и создаем Проект с поддиректориями с системой сборки qmake. Не знаю, у всех ли так, но у меня только qmake позволяет создать проект с поддиректориями, и только проект с поддиректориями позволяет подключать к себе библиотеки.

  2. Сразу же создаем подпроект, в main.cpp которого помещаем код. В моем случае это тривиальный код для проверки работоспособности библиотеки:

#include <curses.h>

int main()
{
    initscr(); //запускаем курсис
    endwin(); //убиваем курсис
    return 0;
}

ВАЖНО! Систему сборки для подпроекта тоже нужно выбрать qmake, иначе подсоединить его как подпроект к нашему проекту с поддиректориями не получится.

  1. Кликая правой кнопкой мыши по головной папке проекта с поддиректориями, выбираем Add Library/Добавить библиотеку.

  2. Далее выбираем вариант Внешняя библиотека и идем прописывать пути.

  3. Прописываем пути к .а-файлу и к папке, где лежат .h-файлы. Я использую mingw64, поэтому я поместила файлы с mingw64\x86_64-w64-mingw32\lib и в mingw64\x86_64-w64-mingw32\include. Я также добавила пути к этим папкам в Path, хотя, честно говоря, точно не знаю, как это работает. Мне также пришлось переименовать pdcurses.a в libpdcurses.a под требования системы подключения библиотек QT Creator'а, но это вроде бы не играет роли.

  4. Снимаем галочки с 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, оказываются на деле недоступны. Собственно, вопрос, отчего такое может происходит и как это пофиксить. Я не уверена, что можно прикреплять сюда левые ссылки, но если понадобится, я могу предоставить архив с исходниками библиотеки. Надеюсь на Вашу помощь и снисходительность, если вопрос вдруг очевиден, потому что я потратила два дня и не смогла исправить это. Заранее спасибо!


Ответы (0 шт):