LINUX.ORG.RU

Как вывести текст при запуске динамической библиотеки?

 , , ,


0

2

Бо́льшая часть динамических библиотек моей системы исполняемые. Но при попытке выполнить их возникает ошибка Segmentation failed. Подразумевает ли формат ELF (.so) возможность вывода текстовой информации?

Например: запустил файл-библиотеку — получил текст с версией.

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

а) Можно ли реализовать на Линукс (ELF)? б) Если да, есть ли возможность сделать это в clang, при создании библиотеки?


Это бич opensource. Винде проще - решили и сделали. Тут же решать некому, всем пофиг, ненужно и прочее. До стандарта доползти - нереально.

Anoxemian ★★★★★
()

Да, можно. Как – загуглишь.

Кратко: всего-то напрямую выставить интерпретатор и entry point.

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

Можно даже и crtbegin/crtend прилинковать и у тебя будет main.

a1ba ★★★
()

а) Можно ли реализовать на Линукс (ELF)?

Можно. Я разрешаю.

б) Если да, есть ли возможность сделать это в clang, при создании библиотеки?

Можно. Я разрешаю.

Подразумевает ли формат ELF (.so) возможность вывода текстовой информации?

Нет. Но можно сделать сделать ELF запускаемым.

но пример где-то видел, как открытие библиотеки выводило версию.

Попробуй выполнить:

/lib/x86_64-linux-gnu/libc.so.6

Glibc часто приводят как пример «исполняемой библиотеки».

i-rinat ★★★★★
()

Бо́льшая часть динамических библиотек моей системы исполняемые

твоя проблема в этом, для библиотек executable не нужен.

anonymous
()

Можно, тот же libc выводит версию.
Но у большинства библиотек энтрипоинта нет

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

Да нихрена. Никто не мешает любому лялексодистру линковать main() во все динамические библиотеки где его нет.

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

Для этого не нужен стандарт. Достаточно воли одного чувака с шилом в жопе. Вон как Поцтеринг всем свой systemd засадил за по самые гланды.

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

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

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

Тоже так подумал сначало, но, видимо, нет, не этого он хочет.

blex ★★★★
()
Ответ на: комментарий от i-rinat

Попробуй выполнить libc.so.6

$ /lib64/libc.so.6

GNU C Library (Gentoo 2.38-r10 (patchset 10)) stable release version 2.38.
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 13.2.1 20240113.
libc ABIs: UNIQUE IFUNC ABSOLUTE
Minimum supported kernel: 3.2.0
For bug reporting instructions, please see:
<https://bugs.gentoo.org/>.
Shushundr ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.