Интеграция qsvn в свой проект (ошибки компиляции undefined reference - C++ Qt)

Модератор: Модераторы разделов

Ответить
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Интеграция qsvn в свой проект

Сообщение yamah »

Всем доброго дня!

Есть задача в своем приложении (на Qt 5.5) реализовать функции SVN-клиента, без вызова внешних утилит. (Принцип KISS, конечно, правильный, но в некоторых случаях будет только хуже.)

В качестве решения задачи было решено импортировать код пролекта qsvn.
Попытка разобраться в импортируемом коде привела к ошибке компелирования

svnQt/svn/svnclient.cpp:56: ошибка: undefined reference to `svn::Context::Context(QString const&)'

svnQt/svn/svnclient.cpp:57: ошибка: undefined reference to `svn::Client::getobject(svn::smart_pointer<svn::Context>, int)'

svnQt/svn/svnclient.cpp:60: ошибка: undefined reference to `svn::Context::setListener(svn::ContextListener*)'


Проблемный код взят без изменений из qsvn:

svn/svnclient.h

Код: Выделить всё

#include "svnqt/client.hpp"
//<Пропущено>
svn::ContextP svnContext;


svn/svnclient.cpp

Код: Выделить всё

SvnClient::SvnClient()
{
    svnContext = new svn::Context();
    svnClient = svn::Client::getobject(svnContext, 0);
    listener = new Listener(this);

    svnContext->setListener(listener);
    m_InProgress = false;
}

Описание (в иклюдах) svn::ContextP
svnqt/svnqttypes.hpp

Код: Выделить всё

namespace svn
{
//<Вырезано>
typedef smart_pointer<svn::Context> ContextP;

Описание (в иклюдах) svn::Context - класс описанный в svnqt/context.hpp

Оригинальный проект собирается cmake. Я же собираю qmake.
В любом случае, версия Qt - 5.5.1

Прошу помощи в устранении этой проблемы.
svnQt.tar.gz
(44.89 КБ) 10 скачиваний

Заранее благодарю.

PS: Так как не все импортировано из qsvn, возможна ругань компилятором на другие участки кода, ссылающиеся на отсутствующие классы из проекта qsvn.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Интеграция qsvn в свой проект

Сообщение Bizdelnick »

yamah писал(а):
16.01.2016 13:07
ошибке компелирования

yamah писал(а):
16.01.2016 13:07
ошибка: undefined reference to

Это ошибка не от компилятора, а от линковщика. Какую-то библиотеку забыли.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
devilr
Сообщения: 3667
ОС: Mandriva => Gentoo (~amd64)
Контактная информация:

Re: Интеграция qsvn в свой проект

Сообщение devilr »

Как минимум в pro файле у вас отсутствует DEPENDPATH. "undefined reference" часто из-за этого.
Ну и сам qsvn надо будет самому качнуть, распаковать, настроить и не факт, что все получится так-же, как и у вас сейчас. Я бы сложил все в один проект, тем более, что qsvn отсутствует в репозитории (дженты) и его все равно придется собирать (ставить) вручную.
Мудрость приходит с возрастом.
Иногда возраст приходит один.
Эхо разума
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Re: Интеграция qsvn в свой проект

Сообщение yamah »

Bizdelnick писал(а):
16.01.2016 13:50
yamah писал(а):
16.01.2016 13:07
ошибке компелирования

yamah писал(а):
16.01.2016 13:07
ошибка: undefined reference to

Это ошибка не от компилятора, а от линковщика. Какую-то библиотеку забыли.

Гм! Еще бы понять какую.

devilr писал(а):
16.01.2016 13:52
Как минимум в pro файле у вас отсутствует DEPENDPATH. "undefined reference" часто из-за этого.
Ну и сам qsvn надо будет самому качнуть, распаковать, настроить и не факт, что все получится так-же, как и у вас сейчас. Я бы сложил все в один проект, тем более, что qsvn отсутствует в репозитории (дженты) и его все равно придется собирать (ставить) вручную.

Да, действительно нет.

Спасибо, буду искать что туда надо подложить.

Ссылка на исходники, была в первом сообщении.
На всякий случай дублирую ее тут :)
Во вложении инклюды: libsvn-devel, libapr-devel, и дубль svnqtlib-devel.
Вложения
include.tar.gz
(508.83 КБ) 4 скачивания
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Интеграция qsvn в свой проект

Сообщение Bizdelnick »

yamah писал(а):
16.01.2016 16:29
Еще бы понять какую.

Ту, в которую входят эти функции, очевидно.
Может быть, конечно, Вы не библиотеку забыли, а объектный файл (возможно, даже не скомпилировали его).
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Интеграция qsvn в свой проект

Сообщение Bizdelnick »

Собственно, при сборке чего выводится ошибка? Вашего кода, основанного на qsvn, или svnqt? Вы вообще svnqt собрали или установили системный? (Я бы с системным для начала поэкспериментировал.)
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Re: Интеграция qsvn в свой проект

Сообщение yamah »

Bizdelnick писал(а):
16.01.2016 16:58
yamah писал(а):
16.01.2016 16:29
Еще бы понять какую.

Ту, в которую входят эти функции, очевидно.
Может быть, конечно, Вы не библиотеку забыли, а объектный файл (возможно, даже не скомпилировали его).


Добавил в PRO-файл

Код: Выделить всё

DEPENDPATH += /usr/include/subversion-1 \
        /usr/include/apr-1

LIBS += -L/usr/lib64/libsvn_client-1.so \
        -L/usr/lib64/libsvn_delta-1.so \
        -L/usr/lib64/libsvn_diff-1.so \
        -L/usr/lib64/libsvn_fs-1.so \
        -L/usr/lib64/libsvn_fs_base-1.so \
        -L/usr/lib64/libsvn_fs_fs-1.so \
        -L/usr/lib64/libsvn_fs_util-1.so \
        -L/usr/lib64/libsvn_ra-1.so \
        -L/usr/lib64/libsvn_ra_local-1.so \
        -L/usr/lib64/libsvn_ra_serf-1.so \
        -L/usr/lib64/libsvn_ra_svn-1.so \
        -L/usr/lib64/libsvn_repos-1.so \
        -L/usr/lib64/libsvn_subr-1.so \
        -L/usr/lib64/libsvn_wc-1.so


С объектным файлом сложнее. Что нужно сделать, чтобы Qt собрала объектные файлы со сторонними библиотеками?
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Интеграция qsvn в свой проект

Сообщение Bizdelnick »

yamah писал(а):
16.01.2016 17:12
Что нужно сделать, чтобы Qt собрала объектные файлы со сторонними библиотеками?

Объектные файлы собираются сами по себе (с включением нужных заголовков, разумеется). Сторонние библиотеки нужны только при линковке.
Так у Вас ошибка починилась или нет?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Re: Интеграция qsvn в свой проект

Сообщение yamah »

Bizdelnick писал(а):
16.01.2016 17:26
yamah писал(а):
16.01.2016 17:12
Что нужно сделать, чтобы Qt собрала объектные файлы со сторонними библиотеками?

Объектные файлы собираются сами по себе (с включением нужных заголовков, разумеется). Сторонние библиотеки нужны только при линковке.
Так у Вас ошибка починилась или нет?

В том-то и дело, что нет. :(

Иклюды libsvn, libapr и qsvn находятся в /usr/include
В катлоге сборки объектные файлы от подключаемых библиотек не образуются.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Интеграция qsvn в свой проект

Сообщение Bizdelnick »

yamah писал(а):
16.01.2016 17:37
В катлоге сборки объектные файлы от подключаемых библиотек не образуются.

Они и не должны. Всё, что от Вас требуется, это указать линковщику все необходимые объектные файлы (Ваши) и библиотеки (сторонние).
И показывайте, пожалуйста, ту часть лога сборки, где содержится команда линковки и её вывод, а то совершенно непонятно, о чём мы говорим.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Re: Интеграция qsvn в свой проект

Сообщение yamah »

Bizdelnick писал(а):
16.01.2016 17:54
И показывайте, пожалуйста, ту часть лога сборки, где содержится команда линковки и её вывод, а то совершенно непонятно, о чём мы говорим.


Во вложении полный лог сборки. (Заменил путь до каталога с проектом на "~/")
Запуск LD мне не по глазам
make.txt.tar.gz
(6.08 КБ) 8 скачиваний


Отредактировал первое сообщение. Файл с тестовым проектом загрузл, но забыл отобразить. :blush:
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Интеграция qsvn в свой проект

Сообщение Bizdelnick »

Вот же оно:

Код: Выделить всё

g++ -m64 -Wl,-O1 -Wl,--as-needed -Wl,--no-undefined -Wl,-z,now -Wl,-z,relro -Wl,-O1 -Wl,--build-id -Wl,--enable-new-dtags -Wl,--hash-style=gnu -o svnQt main.o mainwindow.o svncli.o svnclient.o listener.o statustext.o config.o sslservertrust.o showlog.o logchangepathentriesmodel.o logentriesmodel.o textedit.o merge.o qrc_qsvn.o moc_mainwindow.o moc_svnclient.o moc_listener.o moc_statustext.o moc_config.o moc_sslservertrust.o moc_showlog.o moc_logchangepathentriesmodel.o moc_logentriesmodel.o moc_textedit.o moc_merge.o   -L/usr/X11R6/lib64 -L/usr/lib64/libsvnqt.so.7 -L/usr/lib64/libsvn_client-1.so -L/usr/lib64/libsvn_delta-1.so -L/usr/lib64/libsvn_diff-1.so -L/usr/lib64/libsvn_fs-1.so -L/usr/lib64/libsvn_fs_base-1.so -L/usr/lib64/libsvn_fs_fs-1.so -L/usr/lib64/libsvn_fs_util-1.so -L/usr/lib64/libsvn_ra-1.so -L/usr/lib64/libsvn_ra_local-1.so -L/usr/lib64/libsvn_ra_serf-1.so -L/usr/lib64/libsvn_ra_svn-1.so -L/usr/lib64/libsvn_repos-1.so -L/usr/lib64/libsvn_subr-1.so -L/usr/lib64/libsvn_wc-1.so -lQt5Widgets -lQt5Gui -lQt5Network -lQt5Core -lGL -lpthread

Сравните с аналогичной командой при сборке qsvn и посмотрите, чего не хватает.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS
Контактная информация:

Re: Интеграция qsvn в свой проект

Сообщение yamah »

В PRO файле прописал правильные либы - собралось на Qt4.
Теперь смотреть, почему Qt5 выдает

Код: Выделить всё

make: Цель «first» не требует выполнения команд.

Но это уже отдельная тема.

Спасибо за помощь!
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Ответить