Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 21.01.2014
Сообщений: 73
1

Создать динамическую библиотеку, вызывающую функцию из статической

22.05.2016, 03:42. Показов 1254. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
тут появилось два вопроса:
1)создать динамическую библиотеку, вызывающую функцию из статической
2)статическую библиотеку, вызывающую функцию из динамической

Пусть мы пока смотрим на первый вопрос, помогите мне найти ошибку, или подскажите как можно сделать по другому:
я создаю статическую библиотеку:
для этого пишу код:
C
1
2
3
4
5
6
7
#include <stdio.h>
 
extern int sort()
{
 printf("\nHello World!\n");
 return 0;
}
Назову программу aStatic.c
теперь создаю саму библиотеку, пишу для этого в терминале:
gcc -c ./aStatic.c -o aStatic.o
ar rc aStatic.a aStatic.o
ranlib aStatic.a
На этом этапе нигде ошибок не выдает

далее создаю динамическую библиотеку:
C
1
2
3
4
5
6
7
#include <stdio.h>
extern int sort();
extern int mainDS()
{
    sort();
    return 0;
}
Назову файл aDS.c
теперь создаю сам файл библиотеки в консоли со статической загрузкой:
gcc fPIC -c ./aDS.c -o aDS.o
gcc -shared -o aDS.so aDS.o
Тут пока тоже без ошибок
далее пишу программу, в которой использую динамическую библиотеку:
C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
extern int mainDS();
 
int main()
{
    printf("Dynamic library with static loader");
    int x = mainDS();
    printf("Return code: %d\n",x);
    return 0;
}
назову программу eProg.c
и компилирую её вместе с динамической и статической библиотекой:
gcc ./eProg.c aDS.so aStatic.a
Ошибок по прежнему нет
теперь запускаю файл запуска:
./a.out
и тут мне пишет:
./a.out: error while loading shared libraries: aDS.so: cannot open shared object file: No such file or directory
когда делаю аналогичные действия для обратной задачи - такая же ошибка, помогите разобраться, я считаю, что мне нужно как-то при сборке динамической библиотеке указать файл статической библиотеки, но как это сделать я не придумал
Спасибо заранее
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2016, 03:42
Ответы с готовыми решениями:

Как создать динамическую библиотеку на C# ?
В двух проектах: Редактор для тестов и сама программа для тестирования нужно использовать те же...

Не удается создать динамическую библиотеку в VS
Добрый вечер. Возникла проблема с созданием динамической библиотеки, реализующей операции с...

Как создать динамическую библиотеку .so с классами
Здравствуйте! Возник вопрос, как вообще изпользовать классы в .so библиотеке, чтобы я мог её...

Как создать динамическую библиотеку dll в Microsoft Visual c++ и использовать ее
Как создать динамическую библиотеку dll в visual 2017 на с++ и как подключить ее к другим проектам?

2
шКодер самоучка
2227 / 1921 / 927
Регистрация: 09.10.2013
Сообщений: 4,260
Записей в блоге: 7
22.05.2016, 04:03 2
Текущая директория находится вне списка, где система ищет библиотеки
Нужно запускать программу с установкой переменной окружения LD_LIBRARY_PATH
Bash
1
LD_LIBRARY_PATH="./:$LD_LIBRARY_PATH" ./prog_name
1
0 / 0 / 0
Регистрация: 21.01.2014
Сообщений: 73
22.05.2016, 09:40  [ТС] 3
Цитата Сообщение от Cra3y Посмотреть сообщение
Текущая директория находится вне списка, где система ищет библиотеки
Нужно запускать программу с установкой переменной окружения LD_LIBRARY_PATH

Да, прописал это в терминале, и указал вместо ./prog_name ./a.out и всё заработало
Большое спасибо!

Добавлено через 4 часа 28 минут
Знаю, что не в этот раздел, но что делать, если такая же ситуация возникает в OS Windows, пишет:
>main.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__sortT в функции _main
1>F:\andro\C++\os\Lab8\eProg\Debug\eProg.exe : fatal error LNK1120: неразрешенных внешних элементов: 1

Добавлено через 21 минуту
всё заработало, просто забыл при создании второй библиотеки подключить заголовочные файлы обоих библиотек
0
22.05.2016, 09:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2016, 09:40
Помогаю со студенческими работами здесь

Создать динамическую библиотеку для вычисления разности кубов двух чисел
Создать динамическую библиотеку для вычисления разности кубов двух чисел

Создать командную кнопку, вызывающую функцию, которая определяет, входит ли один список в другой
Создать и отобразить на форме два списка символьных строк. Создать командную кнопку, вызывающую...

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

Ошибка с записью статической переменной в динамическую
Здравствуйте, я пишу программу и тут на моем пути встала одна проблема - пытаюсь записать в...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru