Russian Qt Forum

Qt => Общие вопросы => Тема начата: xintrea от Июль 01, 2016, 16:52



Название: Как правильно подключить libssh к проекту Qt в Windows?
Отправлено: xintrea от Июль 01, 2016, 16:52
Пытаюсь собрать проект X2GO Client под WIndows с целью пофиксить баг буфера обмена (не передается кириллица с Linux-сервера на Windows-клиент). Беру исходники отсюда:

Код:
git clone git://code.x2go.org/x2goclient.git
git checkout fb35d188406ba3fb2567d701e0398503e9253c02

Специально для данного проекта сделал среду Qt 4.8.6 + Qt Creator 4.0.2 + MinGw 4.8.2. Всю последовательность действий записал в статью:

Установка и настройка комплекта Qt 4.8.6, Qt Creator 4.0.2 и MinGw 4.8.2 под Windows (http://webhamster.ru/mytetrashare/index/mtb0/1467373927r5m8rqalnb)


Теперь надо собрать проект. Для компиляции нужна библиотека libssh. Беру ее со страницы:

https://red.libssh.org/projects/libssh/files

Взял файл: https://red.libssh.org/attachments/download/179/libssh-0.7.2-mingw.zip .

Распаковал содержимое в каталог:

Код:
C:\tools\libssh

Таким образом, заголовок libssh.h лежит по следующему пути:

Код:
C:\tools\libssh\libssh-0.7.2\include\libssh\libssh.h

А библиотека лежит по пути:

Код:
C:\tools\libssh\libssh-0.7.2\lib\libssh.dll.a

Далее в Qt Creator воспользовался контекстным меню "Добавить библиотеку...". В результате, в PRO-файл прописались опции:

Код:
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/C:/tools/libssh/libssh-0.7.2/lib/ -llibssh.dll
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/C:/tools/libssh/libssh-0.7.2/lib/ -llibssh.dlld

INCLUDEPATH += $$PWD/C:/tools/libssh/libssh-0.7.2/include
DEPENDPATH += $$PWD/C:/tools/libssh/libssh-0.7.2/include

Однако, компиляция не идет. Ошибка следующая:

Код:
g++ -c -pipe -O2 -frtti -fexceptions -mthreads -Wall -Wextra -DUNICODE -DCFGCLIENT -DQT_NO_DEBUG -DQT_SVG_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\tools\qt\qt_4_8_6\include\QtCore" -I"c:\tools\qt\qt_4_8_6\include\QtNetwork" -I"c:\tools\qt\qt_4_8_6\include\QtGui" -I"c:\tools\qt\qt_4_8_6\include\QtSvg" -I"c:\tools\qt\qt_4_8_6\include" -I"..\x2go_client\src" -I"d:\Stepanov\code\cpp\x2go_client\C:\tools\libssh\libssh-0.7.2\include" -I"c:\tools\qt\qt_4_8_6\include\ActiveQt" -I"release" -I"." -I"..\x2go_client" -I"." -I"c:\tools\qt\qt_4_8_6\mkspecs\win32-g++" -o release\sharewidget.o ..\x2go_client\src\sharewidget.cpp
In file included from ..\x2go_client\src\onmainwindow.h:47:0,
                 from ..\x2go_client\src\sharewidget.cpp:19:
..\x2go_client\src\sshmasterconnection.h:21:27: fatal error: libssh/libssh.h: No such file or directory
 #include <libssh/libssh.h>
                           ^
compilation terminated.
Makefile.Release:596: recipe for target 'release/sharewidget.o' failed
mingw32-make[1]: Leaving directory 'build-x2goclient-Qt_4_8_6-Debug'
Makefile:34: recipe for target 'release' failed

Вопрос: что не так делаю? Как заставить компилироваться проект с libssh?



Название: Re: Как правильно подключить libssh к проекту Qt в Windows?
Отправлено: kambala от Июль 01, 2016, 17:43
а qmake выполнил после добавления?


Название: Re: Как правильно подключить libssh к проекту Qt в Windows?
Отправлено: Old от Июль 01, 2016, 17:53
Вопрос: что не так делаю? Как заставить компилироваться проект с libssh?

Вас пути не смущают?

Код:
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/C:/tools/libssh/libssh-0.7.2/lib/ -llibssh.dll
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/C:/tools/libssh/libssh-0.7.2/lib/ -llibssh.dlld

INCLUDEPATH += $$PWD/C:/tools/libssh/libssh-0.7.2/include
DEPENDPATH += $$PWD/C:/tools/libssh/libssh-0.7.2/include

Уберите $$PWD/ из путей.


Название: Re: Как правильно подключить libssh к проекту Qt в Windows?
Отправлено: xintrea от Июль 01, 2016, 22:03
Уберите $$PWD/ из путей.

Убрал, строки в PRO-файле стали выглядеть так:

Код:
win32:CONFIG(release, debug|release): LIBS += -LC:/tools/libssh/libssh-0.7.2/bin/ -llibssh.dll
else:win32:CONFIG(debug, debug|release): LIBS += -LC:/tools/libssh/libssh-0.7.2/bin/ -llibssh.dlld

INCLUDEPATH += C:/tools/libssh/libssh-0.7.2/include
DEPENDPATH += C:/tools/libssh/libssh-0.7.2/include

Компиляция пошла, но похоже, что теперь затык на линковке:

Код:
g++ -Wl,-s -mthreads -Wl,-subsystem,windows -o release\x2goclient.exe object_script.x2goclient.Release  -L"c:\tools\qt\qt_4_8_6\lib" -lmingw32 -lqtmain release\x2goclient_res.o -lssh -lAdvAPI32 -lshell32 -lUser32 -lwinspool -lws2_32 -LC:/tools/libssh/libssh-0.7.2/bin/ -llibssh.dll -lQtSvg4 -lQtGui4 -lQtNetwork4 -lQtCore4 
C:/tools/qt/mingw_4_8_2/bin/../lib/gcc/i686-w64-mingw32/4.8.2/../../../../i686-w64-mingw32/bin/ld.exe: cannot find -llibssh.dll
collect2.exe: error: ld returned 1 exit status
Makefile.Release:221: recipe for target 'release\x2goclient.exe' failed
mingw32-make[1]: Leaving directory 'build-x2goclient-Qt_4_8_6-Debug'
Makefile:34: recipe for target 'release' failed
mingw32-make[1]: *** [release\x2goclient.exe] Error 1

Я попробовал заменить

Код:
C:/tools/libssh/libssh-0.7.2/lib/

на

Код:
C:/tools/libssh/libssh-0.7.2/bin/

так как в /lib лежит файл libssh.dll.a, а в /bin лежит просто libssh.dll, но и так и так линковка не идет.

Как побороть?


Название: Re: Как правильно подключить libssh к проекту Qt в Windows?
Отправлено: Old от Июль 01, 2016, 22:20
Попробуйте прописать путь до директории lib и имя библиотеки задать -lssh.dll


Название: Re: Как правильно подключить libssh к проекту Qt в Windows?
Отправлено: xintrea от Июль 02, 2016, 11:56
Попробуйте прописать путь до директории lib

Где прописать?


Название: Re: Как правильно подключить libssh к проекту Qt в Windows?
Отправлено: Old от Июль 02, 2016, 12:08
Где прописать?
Так сделайте:

Код:
win32:CONFIG(release, debug|release): LIBS += -LC:/tools/libssh/libssh-0.7.2/lib/ -lssh.dll
else:win32:CONFIG(debug, debug|release): LIBS += -LC:/tools/libssh/libssh-0.7.2/lib/ -lssh.dlld


Название: Re: Как правильно подключить libssh к проекту Qt в Windows?
Отправлено: Alex Custov от Июль 02, 2016, 22:05
надо просто -lssh


Название: Re: Как правильно подключить libssh к проекту Qt в Windows?
Отправлено: Old от Июль 03, 2016, 06:04
надо просто -lssh
mingw сам "додумывает" до .dll.a?


Название: Re: Как правильно подключить libssh к проекту Qt в Windows?
Отправлено: xintrea от Июль 03, 2016, 22:06
mingw сам "додумывает" до .dll.a?

Скомпилировать получилось. Но запуск не работает.

Происходит сегфолт (точнее, похоже, что выход с ошибкой в неизвестном коде) еще до вызова функции main():

http://i.piccy.info/i9/f22649e03122a602dc0db92b120f1a48/1467572668/173469/825956/scr_386.png

В чем может быть проблема?


Название: Re: Как правильно подключить libssh к проекту Qt в Windows?
Отправлено: Old от Июль 04, 2016, 08:03
В чем может быть проблема?
При запуске все dll доступны (лежат рядом с exe или доступны по PATH)?