Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7

Shared object или как оно работает?

20.11.2015, 01:07. Показов 3802. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем, растолкуйте уважаемые, на счет этих shared object библиотек, они же *.so
Вот с виндовскими dll всё ясно, и точка входа и импорт экспорт и загрузка выгрузка.
а тут я ничего не пойму! находил пару примеров, нет там точек входа, компилируется с какими то мутными директивами , да еще и жестко задается путь для этой библиотеки!

прошу понятным языком, с примерами разъяснить.
заранее спасибо =)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.11.2015, 01:07
Ответы с готовыми решениями:

Какой View лучше "shared, Private On First Use" или Shared
Доброго всем дня. Вопрос больше теоретически. Есть набор документов (пока немного около 500, каждый месяц будет прирост примерно...

Object = Object или как сравнить два объекта?
Люди, Край надо сравнить два объекта: Типа Set Obj1 = Form1 Set Obj2 = Form2 If Obj1 = Obj2 then ... Но VB говорит, что...

Libsfml-graphics.so.2.4: cannot open shared object file: No such file or directory
Ошибка запуска скомпилированных программ. Работаю под xUbuntu на Code::Blocks, всё компилится(на удивлении) но не запускается вот такая...

11
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.11.2015, 09:50
А что конкретно ты хочешь узнать?

Вопросы по динамическим библиотекам
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
20.11.2015, 18:00  [ТС]
Evg, ну хочу подробной информации о библиотеках so

во-первых пример кода такой библиотеки.
как там экспортировать классы, функции,
есть ли там точка входа как в виндовс? типа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}
как это чудо грузить в приложение..
в общем вопросов много а инфы не могу найти. =(

Добавлено через 2 минуты
просто чтобы перенести на линукс свое приложение по-человечески, вот разбираюсь как оно там функционирует
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.11.2015, 18:18
Цитата Сообщение от Крюгер Посмотреть сообщение
во-первых пример кода такой библиотеки.
как там экспортировать классы, функции
Если я правильно понимаю слово "экспортировать", то все НЕ-static функции и переменные будут доступны для использования из других библиотек. Сие можно и более тонко настроить, но пока тебе это явно не надо

Цитата Сообщение от Крюгер Посмотреть сообщение
есть ли там точка входа как в виндовс?
Нету. Я вообще не понимаю, что такое "точка входа" по отношению к динамической библиотеке, но если что-то, что вызывается автоматически при её загрузке, то есть. Все конструкторы глобальных переменных будут вызваны, если речь об этом

Добавлено через 2 минуты
Цитата Сообщение от Крюгер Посмотреть сообщение
как это чудо грузить в приложение..
Что такое "грузить"? Если подгружать библиотеку уже во время работы приложения, то функция dlopen
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
20.11.2015, 18:23  [ТС]
Evg,
Цитата Сообщение от Evg Посмотреть сообщение
Сообщение от Крюгер
есть ли там точка входа как в виндовс?
Нету. Я вообще не понимаю, что такое "точка входа" по отношению к динамической библиотеке, но если что-то, что вызывается автоматически при её загрузке, то есть. Все конструкторы глобальных переменных будут вызваны, если речь об этом
и тут, я как заядлый виндузятник повис.

можете привести пример кода такой библиотеки?

Добавлено через 1 минуту
ну допустим хочу от туда использовать класс, и какую нибудь функцию. и как это будет?
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
20.11.2015, 18:38
Цитата Сообщение от Крюгер Посмотреть сообщение
можете привести пример кода такой библиотеки?
Внятно поставленный вопрос - это уже половина ответа. Я пока за всю тему ни одного внятного вопроса не услышал. "Такой" библиотеки - это какой?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
20.11.2015, 18:38
Это?
http://man7.org/linux/man-pages/man3/dlopen.3.html
Initialization and finalization functions
Shared objects may export functions using the
__attribute__((constructor)) and __attribute__((destructor)) function
attributes. Constructor functions are executed before dlopen()
returns, and destructor functions are executed before dlclose()
returns. A shared object may export multiple constructors and
destructors, and priorities can be associated with each function to
determine the order in which they are executed. See the gcc info
pages (under "Function attributes") for further information.

An older method of (partially) achieving the same result is via the
use of two special symbols recognized by the linker: _init and _fini.
If a dynamically loaded shared object exports a routine named
_init(), then that code is executed after loading a shared object,
before dlopen() returns. If the shared object exports a routine
named _fini(), then that routine is called just before the object is
unloaded. In this case, one must avoid linking against the system
startup files, which contain default versions of these files; this
can be done by using the gcc(1) -nostartfiles command-line option.

Use of _init and _fini is now deprecated in favor of the
aforementioned constructors and destructors, which among other
advantages, permit multiple initialization and finalization functions
to be defined.
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
20.11.2015, 18:40  [ТС]
Croessmah, полезная инфа, пригодится
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
20.11.2015, 18:41
Крюгер, там много всего. И примеры использования тоже есть.
1
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
20.11.2015, 19:50  [ТС]
Evg, логично предположить что я имею в виду пример кода динамической библиотеки для линукс. то есть *.so .
а именно что там должно быть, чего не должно быть, и как это скомпилировать (команды)

ЕЩЕ ТОЧНЕЕ:
я хочу пример, где показано, как записать в эту so библиотеку пару функций типа
C++
1
2
 int foo( int x , int b)
{...code...}
и как потом их вызвать из основного приложения.
по dll таких статей куча, и вопросов не возникает, а тут конфуз у меня случился, понимаете? инфы не могу найти , не получается ничего. такие дела..
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
20.11.2015, 21:21
Лучший ответ Сообщение было отмечено Крюгер как решение

Решение

Цитата Сообщение от Крюгер Посмотреть сообщение
я хочу пример, где показано, как записать в эту so библиотеку пару функций типа
"GCC - полное руководство"
Иванов Н.Н. - "Программирование в Linux. Самоучитель"
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
21.11.2015, 00:28
C
/* Файл mod.c */
#include <stdio.h>
 
extern void foo (void);
 
int main (void)
{
  printf ("main start\n");
  foo ();
  printf ("main finish\n");
  return 0;
}
C
/* Файл lib.c */
#include <stdio.h>
 
void __attribute__((constructor))
bar1 (void)
{
  printf ("bar1\n");
}
 
void __attribute__((destructor))
bar2 (void)
{
  printf ("bar2\n");
}
 
void foo (void)
{
  printf ("foo\n");
}
Code
$ gcc lib.c -fPIC -c -o lib.o
$ gcc lib.o -shared -o libqqq.so
$ gcc mod.c -c -o mod.o
$ gcc mod.o -L. -lqqq
 
$ LD_LIBRARY_PATH=`pwd` ./a.out
bar1
main start
foo
main finish
bar2
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.11.2015, 00:28
Помогаю со студенческими работами здесь

Скрипт не работает - NullReferenceException: Object reference not set to an instance of an object MissionSay.S
Нужный элемент со скриптом MissionPlayer.cs есть Версия Unity: 5.4.1 Код: using UnityEngine; using System.Collections;

КАК оно работает?
Раскрутил я старый налобный фонарь с аккумом. Там был сам аккум, кнопочка, и платка. Платка меня заинтересовала. Маленькая вроде, а от неё...

Как оно работает ?
Привет, возник такой вопрос - как функционирует win10? Суть вопроса в том как осуществляется связь между составными частями системы и какие...

Как оно работает?
Народ, объясните мне, как вот это работает? 2hASOre63Nk

Typeid-как оно работает
Добрый день.Я встречала,что typeid используется для определения типа в том случае,когда у нас есть классы.А если мне нужно получить безовый...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru