Russian Qt Forum
Сентябрь 26, 2021, 11:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как правильно подключить libssh к проекту Qt в Windows?  (Прочитано 8603 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 751



Просмотр профиля WWW
« : Июль 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


Теперь надо собрать проект. Для компиляции нужна библиотека 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?

Записан

Собираю информацию по крупицам
http://webhamster.ru
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4341



Просмотр профиля WWW
« Ответ #1 : Июль 01, 2016, 17:43 »

а qmake выполнил после добавления?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4329



Просмотр профиля
« Ответ #2 : Июль 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/ из путей.
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 751



Просмотр профиля WWW
« Ответ #3 : Июль 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, но и так и так линковка не идет.

Как побороть?
Записан

Собираю информацию по крупицам
http://webhamster.ru
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4329



Просмотр профиля
« Ответ #4 : Июль 01, 2016, 22:20 »

Попробуйте прописать путь до директории lib и имя библиотеки задать -lssh.dll
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 751



Просмотр профиля WWW
« Ответ #5 : Июль 02, 2016, 11:56 »

Попробуйте прописать путь до директории lib

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

Собираю информацию по крупицам
http://webhamster.ru
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4329



Просмотр профиля
« Ответ #6 : Июль 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
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #7 : Июль 02, 2016, 22:05 »

надо просто -lssh
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4329



Просмотр профиля
« Ответ #8 : Июль 03, 2016, 06:04 »

надо просто -lssh
mingw сам "додумывает" до .dll.a?
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 751



Просмотр профиля WWW
« Ответ #9 : Июль 03, 2016, 22:06 »

mingw сам "додумывает" до .dll.a?

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

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

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

В чем может быть проблема?
Записан

Собираю информацию по крупицам
http://webhamster.ru
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4329



Просмотр профиля
« Ответ #10 : Июль 04, 2016, 08:03 »

В чем может быть проблема?
При запуске все dll доступны (лежат рядом с exe или доступны по PATH)?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 22.