Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
asdawvwv
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 24
1

Использование функций сторонней библиотеки

23.09.2016, 17:02. Просмотров 420. Ответов 8
Метки нет (Все метки)

Здравствуйте. Пишу консольное приложение для Linux. В программе нужно использовать стороннюю библиотеку. Я её скачал, собрал, подключил в Codeblocks и IDE. Но не могу сообразить как использовать перечисленные там функции. Например:
C++
1
2
3
hive_h *hivex_open (const char *filename, int flags);
Opens the hive named filename for reading.
Flags is an ORed list of the open flags (or 0 if you don't want to pass any flags). These flags are defined
Пишу так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <QCoreApplication>
#include <iostream>
#include <hivex.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    const char* hivefile = "/home/root/hives/SAM";
 
    hive_h *hivex_open (const char *filename, int flags);
    hive_h SAMopen (hivefile, 0);
 
    QCoreApplication a(argc, argv);
    cout << "hi" << endl ;
    return a.exec();
}
Вылетает с ошибкой:
ошибка: variable 'hive_h SAMopen' has initializer but incomplete type
hive_h SAMopen (hivefile, 0);
Прошу подсказать, что я делаю не так. Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2016, 17:02
Ответы с готовыми решениями:

Использование функций сторонней библиотеки из c++ dll
Какой аналог кода (C#): public static extern int Last(string instrument,...

Подключение сторонней библиотеки
Пытаюсь подключить стороннюю библиотеку и ввести код, который представлен в...

Подключение сторонней библиотеки
Всем добрый день! Подскажите, пожалуйста, как можно подключить C библиотеку...

C: проблема с использованием сторонней библиотеки
Всем привет! Помогите решить проблему. Нужно использовать стороннюю библиотеку...

Подключение сторонней библиотеки OpenCV в VS 2013
Помогите пожалуйста как разрешить конфликт подключенных файлов и стандартных...

8
ture
528 / 336 / 206
Регистрация: 27.11.2014
Сообщений: 1,043
23.09.2016, 17:16 2
asdawvwv, бр-р-р-р
Библ в стандартном месте (там, где другие)? Или в своей папке лежит?
Компилится, но не запускается?
0
asdawvwv
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 24
23.09.2016, 17:19  [ТС] 3
Лежит в другом месте. Программа не компилится, библиотека скомпилилась.
0
ture
528 / 336 / 206
Регистрация: 27.11.2014
Сообщений: 1,043
23.09.2016, 17:31 4
asdawvwv, О! Понял.
Теперь надо понять, что должно быть на выходе?
В Linux все библы хранятся в специальных местах и прогружаются от туда один раз (не на пустом месте линух рвет ведро).
Значит твой компилятор ищет библы по стандартным путям (если сказать, имя разыскиваемого библа - опция -l<ИмяБибла>).
Если его там нет, то придется указать путь поиска - опция -L<путь>
Если скомпилировалось, то еще не запустится (ldd - покажет, что не найден библ в стандартном месте)
И тогда придется устанавливать переменную окружения #export LD_LIBRARY_PATH=<путь к библу>

Добавлено через 2 минуты
Так пишут плагины:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <dlfcn.h> 
#include <stdexcept>
 
int main(){
    /*получаем хендл библиотеки*/
    void * hdl=dlopen("./libHello.so",RTLD_LAZY);
    if(hdl==nullptr)
        throw std::runtime_error("Не удается загрузить библиотеку libHello.so из текущего каталога.");
 
    /*получаем указатель на нужную функцию по символам в библиотеке*/
    void (*f)(const char*);
    f=(void (*)(const char *))dlsym(hdl,"_Z5printPKc");
    char * err=dlerror();
    if(err!=nullptr)
        throw std::logic_error(err);
 
    /*вызываем функцию*/
    f("Hello, Пендальф!\n");
 
    /*закрываем библиотеку*/
    dlclose(hdl);
 
    return 0;
}
Это рантайм линковка
0
DrOffset
8130 / 4713 / 1152
Регистрация: 30.01.2014
Сообщений: 7,681
23.09.2016, 17:44 5
Цитата Сообщение от asdawvwv Посмотреть сообщение
Прошу подсказать, что я делаю не так.
Почти все. Вопросы подключения - это одно, но в коде-то тоже все наперекосяк

Нужно как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <hivex.h>
 
int main(int argc, char *argv[])
{
    const char* hivefile = "/home/root/hives/SAM";
 
    hive_h * hFile = hivex_open (hivefile, 0); // вызывается функция библиотеки
    
    // дальше работаем с hFile с помощью других функций библиотеки
 
 
    // в конце работы надо освободить ресурс hFile (в библиотеке должна быть для этого функция)
    return 0;
}
0
asdawvwv
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 24
26.09.2016, 20:34  [ТС] 6
Все равно не получается, дайте, пожалуйста, ещё дельные советы, очень нужно.
0
DrOffset
8130 / 4713 / 1152
Регистрация: 30.01.2014
Сообщений: 7,681
26.09.2016, 21:29 7
Цитата Сообщение от asdawvwv Посмотреть сообщение
дайте, пожалуйста, ещё дельные советы, очень нужно.
Нужен код, желательно компилируемый, чтобы его можно было собрать у себя.
И подробный рассказ что именно "не получается".
Со всем уважением, но гадалки на другом форуме.
0
asdawvwv
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 24
26.09.2016, 21:33  [ТС] 8
Использую Ваш код, хивы не открываются.
0
DrOffset
8130 / 4713 / 1152
Регистрация: 30.01.2014
Сообщений: 7,681
26.09.2016, 21:47 9
Цитата Сообщение от asdawvwv Посмотреть сообщение
хивы не открываются
Вы, вероятно, очень высокого мнения обо мне, если думаете, что все остальные подробности вашего животрепещущего дела я каким-то образом выясню самостоятельно. Мою заинтересованность в этом уж точно преувеличиваете.

Никакой помощи лично я предложить не смогу пока вы:
* Не предоставите полный, компилируемый (или не компилируемый, но актуальный текущему положению вещей) код;
* Не предоставите данные, которые пытаетесь обрабатывать с помощью этого кода (на форуме можно прикладывать любые файлы, если они в архиве);
* Не предоставите какую-либо другую диагностику проблемы, которую вам удалось собрать самостоятельно.
0
26.09.2016, 21:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2016, 21:47

Подключение сторонней библиотеки gmp C++ через MinGW
Скачивал MinGW,там выставлял установку пакета GMP, после чего писал вот такой...

Подключение сторонней библиотеки - как указать путь к .dll файлам
Не могу разобраться как указать путь к .dll файлам пробовал следующее:...

про библиотеки в VS C++ (какие библиотеки нужны для функций 'cout' и 'cin')
какие библиотеки нужны для функций 'cout' и 'cin' ???


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru