LINUX.ORG.RU

Подключение библиотеки hivex

 


0

1

Здравствуйте. Мне нужно написать программу под Debian, в ней нужно использовать возможности библиотеки hivex (работа с реестром Windows). Собственно вопрос. Скачал с github'а библиотеку, а что с ней дальше делать ума не приложу. .lib файлов там нет. Что делать, как мне быть? И еще, смогу ли я использовать эту библиотеку в С++ проекте, или только С? IDE CodeBlocks. Заранее спасибо.



Последнее исправление: kekor (всего исправлений: 1)

.lib файлов там нет

Для начала эту библиотеку стоит собрать. Ну а потом уже прилинковать к своему проекту.


И еще, смогу ли я использовать эту библиотеку в С++ проекте, или только С?

Сможешь. Возможно, extern "C" {…} придётся добавить, разве что

XMs ★★★★★
()

Собрать: ./configure --prefix=/opt && make -j12
Установить: sudo make install (checkinstall)
Использовать: CFLAGS = -I/opt/include LDFLAGS = -L/opt/lib -lhivex

EXL ★★★★★
()
Ответ на: комментарий от EXL

В архиве с библиотекой в папке «lib» есть файл Make.am, в первой команде к нему адрес прописывать?

kekor
() автор топика
Ответ на: комментарий от kekor

Так, давай уточним. Мы оба с тобой имеем ввиду эту библиотеку?

https://github.com/coriolis/hivex

Какой архив ты скачал? Ты скачал видимо архив с исходниками, а не с библиотекой. Их нужно предварительно скомпилировать, а потом установить эту библиотеку в систему.

В терминале выполнять нужно следующее:

cd ~/Downloads/
git clone https://github.com/coriolis/hivex
cd hivex/
./configure --prefix=/opt && make -j<число ядер в твоём процессоре вместе с HT>
sudo make install

Это скомпилирует библиотеку и установит её в системный каталог /opt

Затем в своём C++-проекте делаешь в Makefile (или в настройках среды) или где там всё это пишешь:

CFLAGS = -I/opt/include 
LDFLAGS = -L/opt/lib -lhivex

А в требуемом заголовочном файле

#include <hivex.h>

Без всяких extern «C», поскольку: https://github.com/coriolis/hivex/blob/master/lib/hivex.h#L33

EXL ★★★★★
()
Ответ на: комментарий от EXL

Спасибо огромное за помощь, скачивал всё по ссылке, архивом. Сделал по вашему мануалу:

configure: error: in `/home/nikkey/Загрузки/hivex':
configure: error: The pkg-config script could not be found or is too old.  Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.

kekor
() автор топика
Ответ на: комментарий от kekor

C этим справился. Новая проблема:

In file included from progname.c:26:0:
./stdio.h:1030:1: error: 'gets' undeclared here (not in a function)
 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
 ^
Makefile:1186: recipe for target 'progname.lo' failed
make[4]: *** [progname.lo] Error 1
make[4]: *** Waiting for unfinished jobs....
make[4]: Leaving directory '/home/nikkey/Загрузки/hivex/gnulib/lib'
Makefile:1206: recipe for target 'all-recursive' failed
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory '/home/nikkey/Загрузки/hivex/gnulib/lib'
Makefile:1073: recipe for target 'all' failed
make[2]: *** [all] Error 2
make[2]: Leaving directory '/home/nikkey/Загрузки/hivex/gnulib/lib'
Makefile:1112: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/nikkey/Загрузки/hivex'
Makefile:1019: ошибка выполнения рецепта для цели «all»
make: *** [all] Ошибка 2

kekor
() автор топика
Ответ на: комментарий от kekor

Что за дистрибутив, архитектура?

Возможно не установлено окружение, требуемое для сборки программ.

Я собирал так:

PYTHON=python2 ./configure --prefix=/home/exl/Downloads/hivex-lib && make -j12
EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от kekor

Это заглуши патчем:

diff --git a/gnulib/lib/stdio.in.h b/gnulib/lib/stdio.in.h
index ce00af5..de2e11c 100644
--- a/gnulib/lib/stdio.in.h
+++ b/gnulib/lib/stdio.in.h
@@ -715,8 +715,10 @@ _GL_CXXALIASWARN (gets);
 /* It is very rare that the developer ever has full control of stdin,
    so any use of gets warrants an unconditional warning.  Assume it is
    always declared, since it is required by C89.  */
+#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
 #endif
+#endif
 
 
 #if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@
EXL ★★★★★
()
Ответ на: комментарий от EXL

Огромное спасибо! Как пользоваться diff не понял, но сделал через gedit. Библиотека собралась, установилась но пока не хочет подключаться к проекту.

kekor
() автор топика
Ответ на: комментарий от EXL

Подключил, осталось разбираться в библиотеке. Я просто в Codeblocks не везде указал пути к библиотеке:) Еще раз огромное Вам спасибо!

kekor
() автор топика
Ответ на: комментарий от EXL

Странно, библиотека вроде бы подключилась, компилятор на нее не ругается. Но просто проскакивает строчки с библиотечными командами. Даже в дебагере.

kekor
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.