LINUX.ORG.RU

Информация о разделяемой библиотеке


0

0

Обычно при попытке загрузить либу получаем:

 ./libkdecore.so.5.4.0
Ошибка сегментирования
А вот при поытке загрузить QT либу получаем:
./libQtCore.so.4.6.2
This is the QtCore library version 4.6.2
Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
Contact: Nokia Corporation (qt-info@nokia.com)

Build key:           x86_64 linux g++-4 full-config
Build date:          2010-02-22
Installation prefix: /opt/kde44/qt-kde
Library path:        /opt/kde44/qt-kde/lib
Include path:        /opt/kde44/qt-kde/include 

Что надо в библиотеке сотворить чтобы она себя вела как это делает QT (ковырять систему сборки и исходники qt не прелагать)

забавно... и как вообще ты на это напоролся? :)

Obey-Kun ★★★★★ ()

обозначить точку входи и прописать статический стартап код независящий от неопределенных симболов и выводящий инфу о либе?

exception13 ★★★★★ ()

libc себя так же ведет, а как это делается самому всегда было интересно.

обозначить точку входа

Это что значит, -init?

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

В общем точку входа можно указать так:

$ gcc -fpic -shared -Wl,-e,init test.c

Тогда функция init вызывается при запуске библиотеки, но на этом она падает (

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

у либы полюбому будет не одна точка входа, а несколько

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

>код независящий от неопределенных симболов

как частный случай — перемещаемый код. GOT, PLT в elf-образе, и ключик PIC у компилятора

anonymous ()

алсо, кто тут плакался, что бинарники, собранные на одном линаксе на другом не запускаются. Всем таким — читать про ABI, версии интерфейса, current-revision-age в libtool, вышеприведённую ссылку по либтул

также читать про ABI, «стабильный ABI», хрупкость ABI и хрупкость базового класса в C++.

Что надо в библиотеке сотворить чтобы она себя вела как это делает QT

может, -Wl,rpath жёстко прописать? libtool это иногда сам делает

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

Короче выглядеть сие должно так:

 /* Compile with: g++ -fPIC -o mylib.so lib.cc -shared -e init */

#include <cstdio>
#include <cstdlib>

extern const char interpreter[] __attribute__((section(".interp")))
   = "/lib64/ld-linux-x86-64.so.2";

extern "C" void init();
void init()
{
    printf("Message from the library\n");
    exit(0);
}
 

mskmsk1985 ()
Ответ на: комментарий от madcore

Да оно сильно не портабельно, так что так для развлекухи. Ну или информацию о какомнибудь плагине печатать, если либа есть плагин не более. Просто забавно.

mskmsk1985 ()
Ответ на: комментарий от madcore

вывод информации о версии библиотеки, не более.

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

>не портабельно

Сделай вывод через системные вызовы, как в Qt.

summatus ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.