Добрый день.
Мне предстоит использовать функционал libgit2
в приложении, которое будет написано на Qt
. К сожалению, на данный момент, существует Qt wrapper
только для версии libgit2-0.22.1
- libQgit2-0.22.1
, так что выбирать не приходится. Для начала, я выкачал версию libgit2
отсюда, а libQgit2
стянул git
'ом по ссылке на репозиторий указанной тут. Скачал последний CMake 3.11.0
и с помощью утилиты CMake gui
настроил проект, указав в качестве исходников libQgit2
- корневую папку рабочей дирректории репозитория libQgit2
, в качестве CMAKE_BUILD_TYPE
- Release
(Хотя, как мне потом объяснили, этот параметр игнорируется при дальнейшей сборке в MSVS2017
).
LIBGIT2_FILENAME
- false
(чекбокс не отмечен);LIBGIT2_INCLUDE_DIR
- D:/CPP/GIT/libgit2-0.22.1/include
;LIBGIT2_LIBRARIES
- LIBGIT2_LIBRARIES-NOTFOUND
; LIBGIT2_SRC_DIR
- D:/CPP/GIT/libgit2-0.22.1
; PKG_CONFIG_EXECUTABLE
- D:/Programs/vcpkg-master/vcpkg.exe
.Остальное не трогал, разве что еще не определился ZLIB_LIBRARY_DEBUG-NOTFOUND
.
Вот вывод CMake gui
после Configure - Generate
.
Using libgit2 source from D:/CPP/GIT/libgit2-0.22.1
Checking for module 'libssh2'
invalid command: libssh2
Commands:
vcpkg search [pat] Search for packages available to be built
vcpkg install <pkg>... Install a package
vcpkg remove <pkg>... Uninstall a package
vcpkg remove --outdated Uninstall all out-of-date packages
vcpkg list List installed packages
vcpkg update Display list of packages for updating
vcpkg upgrade Rebuild all outdated packages
vcpkg hash <file> [alg] Hash a file by specific algorithm, default SHA512
vcpkg help topics Display the list of help topics
vcpkg help <topic> Display help for a specific topic
vcpkg integrate install Make installed packages available user-wide. Requires admin privileges on first use
vcpkg integrate remove Remove user-wide integration
vcpkg integrate project Generate a referencing nuget package for individual VS project use
vcpkg integrate powershel
l Enable PowerShell Tab-Completion
vcpkg export <pkg>... [opt]... Exports a package
vcpkg edit <pkg> Open up a port for editing (uses %EDITOR%, default 'code')
vcpkg import <pkg> Import a pre-built library
vcpkg create <pkg> <url>
[archivename] Create a new package
vcpkg owns <pat> Search for files in installed packages
vcpkg env Creates a clean shell environment for development or compiling.
vcpkg version Display version information
vcpkg contact Display contact information to send feedback
Options:
--triplet <t> Specify the target architecture triplet.
(default: %VCPKG_DEFAULT_TRIPLET%, see 'vcpkg help triplet')
--vcpkg-root <path> Specify the vcpkg root directory
(default: %VCPKG_ROOT%)
For more help (including examples) see the accompanying R
EADME.md.
========== LIBQGIT2 Build Information ==========
Build Version: 0.22.1
Install Prefix: D:/libqgit2
To change any of these options, override them using -D{OPTION_NAME} on the commandline.
To build and install LIBQGIT2, run "make" and "make install"
Configuring done
Generating done
При нажатии на кнопку Open Project
открывается MSVS2017
, в котором я делаю Build Solution
два раза, при выбранном Debug
и Release
. В итоге получаю 8 файлов, по 4 для каждой версии - git2.lib
, git2.dll
, qgit2.lib
, qgit2.dll
. Файлы из версии Debug
я переименовываю в git2d.lib
, git2d.dll
, qgit2d.lib
и qgit2d.dll
соответственно. Ошибок в момент сборки не происходит. Далее, я создаю новый проект Qt Widgets Application
, он собирается qmake
, а следовательно имеет .pro
файл настроек. В этом файле я из контекстного меню выбираю Add Library... -> External library
. В папке с проектом, я создаю директорию lib
и кладу туда все 8
собранных файлов. В окне подключения библиотеки, в Library file
я указываю файл D:\CPP\Qt\GitWidgetApp\lib\qgit2.lib
, в Include path
автоматом прописывается D:\CPP\Qt\GitWidgetApp
- корневая директория проекта. Убираю галочки Linux
, Mac
, выбираю Linkage:
- Static
. В группе настроек Windows
оставляю галочку на Add "d" suffix for debug version
. Таким образом, мой .pro
файл выглядит следующим образом:
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = GitWidgetApp
TEMPLATE = app
CONFIG (debug, debug|release) {
CONFIG += console
}
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp \
mainwindow.cpp
HEADERS += \
mainwindow.h \
qgit2.h
FORMS += \
mainwindow.ui
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/lib/ -lqgit2
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/lib/ -lqgit2d
INCLUDEPATH += $$PWD/.
DEPENDPATH += $$PWD/.
win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/lib/qgit2.lib
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/lib/qgit2d.lib
В корневую директорию проекта, я кидаю хидер qgit2.h
из директории D:\CPP\GIT\libqgit2
(это рабочая папка репозитория) и переименованную в qgit2
папку src
, из которой я удаляю все .cpp
файлы, оставляя только .h
. В эту директорию qgit2
, копирую содержимое директории D:\CPP\GIT\libgit2-0.22.1\include
. После этого, создаю простую форму в Qt Designer
, с кнопкой. В mainwindow.cpp
прописываю вот что:
int MainWindow::on_btn_go_clicked()
{
auto repository = new LibQGit2::Repository();
try{
repository->open ("D:/GIT/test_Nivelir_1");
} catch (const LibQGit2::Exception& e){
qDebug()<< e.message () << " -- ERROR;";
return 1;
}
qDebug() << repository->listReferences () << " -- OK;";
return 1;
}
Пример взял отсюда.
Приложение все подхватывает, запускается, но вот в чем проблема:
Если я собираю приложение в режиме Debug
и нажимаю на кнопку, то приложение падает, выдавая следующую ошибку:
при попытке задебажить все это (F5
), кидает на 496
строку qlist.h
-
После n
'ного нажатия F10
, в консоль дебаггера выводится следующее:
Debugging starts
HEAP[GitWidgetApp.exe]:
Invalid address specified to RtlValidateHeap( 00000295A3B20000, 00000295A5B85080 )
Debug Assertion Failed!
Program: ...esktop_Qt_5_11_0_MSVC2017_64bit2-Debug\debug\GitWidgetApp.exe
File: minkernel\crts\ucrt\src\appcrt\heap\debug_heap.cpp
Line: 904
Expression: _CrtIsValidHeapPointer(block)
For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.
(Press Retry to debug the application)
Что самое интересное, так это тот факт, что в режиме Release
все в порядке...
Хочется узнать, в чем тут проблема. Помогите пожалуйста.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Имею простой клиент для высылания сообщений для ActiveMQ на C++ очень похожий на этот пример
Мне нужно создать двусвязный список из нарисованных мною картинокРисую я в компоненте TImage (прямоугольники и эллипсы)
Добрый день всем! Мне необходим на базе Access подготовить базу хранения и редактор правил на некотором DSLДля функциональности редактора использую...
Подскажите, почему не работает такая конструкция на JQuery?