Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 24

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

23.09.2016, 17:02. Показов 1782. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.09.2016, 17:02
Ответы с готовыми решениями:

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

Подключение сторонней библиотеки
Всем добрый день! Подскажите, пожалуйста, как можно подключить C библиотеку .so к файлам C++? Собираю все средствами gcc, Unix-like OS. ...

Подключение сторонней библиотеки
Пытаюсь подключить стороннюю библиотеку и ввести код, который представлен в описании: #include &lt;bprinter/table_printer.h&gt; ...

8
 Аватар для ture
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
23.09.2016, 17:16
asdawvwv, бр-р-р-р
Библ в стандартном месте (там, где другие)? Или в своей папке лежит?
Компилится, но не запускается?
0
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 24
23.09.2016, 17:19  [ТС]
Лежит в другом месте. Программа не компилится, библиотека скомпилилась.
0
 Аватар для ture
553 / 361 / 206
Регистрация: 27.11.2014
Сообщений: 1,049
23.09.2016, 17:31
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
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
23.09.2016, 17:44
Цитата Сообщение от 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
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 24
26.09.2016, 20:34  [ТС]
Все равно не получается, дайте, пожалуйста, ещё дельные советы, очень нужно.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
26.09.2016, 21:29
Цитата Сообщение от asdawvwv Посмотреть сообщение
дайте, пожалуйста, ещё дельные советы, очень нужно.
Нужен код, желательно компилируемый, чтобы его можно было собрать у себя.
И подробный рассказ что именно "не получается".
Со всем уважением, но гадалки на другом форуме.
0
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 24
26.09.2016, 21:33  [ТС]
Использую Ваш код, хивы не открываются.
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
26.09.2016, 21:47
Цитата Сообщение от asdawvwv Посмотреть сообщение
хивы не открываются
Вы, вероятно, очень высокого мнения обо мне, если думаете, что все остальные подробности вашего животрепещущего дела я каким-то образом выясню самостоятельно. Мою заинтересованность в этом уж точно преувеличиваете.

Никакой помощи лично я предложить не смогу пока вы:
* Не предоставите полный, компилируемый (или не компилируемый, но актуальный текущему положению вещей) код;
* Не предоставите данные, которые пытаетесь обрабатывать с помощью этого кода (на форуме можно прикладывать любые файлы, если они в архиве);
* Не предоставите какую-либо другую диагностику проблемы, которую вам удалось собрать самостоятельно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.09.2016, 21:47
Помогаю со студенческими работами здесь

C: проблема с использованием сторонней библиотеки
Всем привет! Помогите решить проблему. Нужно использовать стороннюю библиотеку VSPE API (эмулятор COM-порта). Свою софтину пишу на Си. В...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru