LINUX.ORG.RU

Разделяемая библиотека?


0

0

Господа девелоперы ... вопрос может быть ламерский, но ... Мне дали линуксовую библиотеку ... файл вида name.a ... как я понял это архив, содержащий кучу файлов вида ... name.o Для обращения из Oracle к этой библиотеке мне необходим файл name.so Мне что нужно компилить каждый из файлов архива по отдельности и иметь на выходе кучу so файлов?


cc -lname.a yourprogname.c

anonymous
()

Из .a ты .so не сделаешь, так как собрали её, очевидно, без -fPIC. Проси исходники, пинай того, кто каку дал.

Antichrist
()

mkdir test cp library.a ./test cd test ar x library.a gcc *.o -shared -o library.so

saper ★★★★★
()

mkdir test
cp library.a ./test
cd test
ar x library.a
gcc *.o -shared -o library.so

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


2Antichrist (*) (2002-01-29 19:05:33.0):
> Из .a ты .so не сделаешь, так как собрали её, очевидно, без -fPIC.
ГДЕ ты это вычитал?

Динамические библиотеки под GNU прекрасно собираются без -fPIC.
Помедленнее грузиться будут и не всегда полностью расшариваться. Но
работать будут.

Die-Hard ★★★★★
()

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

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

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

Может, в программе был баг?

Насколько я знаю, libc2 и ld-linux.so устроены так, что при загрузке неперемещаемого
кода перераспределят все, что надо, на лету. По крайней мере, разработчики так заявляют.
Стало быть, либо баг в загрузчике, либо у тебя.

Либо я не правильно понял.

Кто знает поточнее, отзовитесь!

Die-Hard ★★★★★
()
Ответ на: комментарий от Vasco


> Так я не понял ...способ Сапера реально работает или нет?
Короче, я попробовал на своих проектах.

Один под Qt на c++. Вообще не получилось.

Поигрался с примерами, данными в Qt - независимо от наличия опции
-fPIC то работают, то нет, а иногда немного глючат.
Похоже, все встает на уши при вызове статических методов.

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

Короче, все не просто, но на чистых сях у меня все правильно работает
независимо от опции -fPIC (а на c++ вообще не работает)




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

отсюда мораль: освоив объектно-ориентированную парадигму вымой руки и двигайся дальше;)

anonymous
()

У меня что в С что С++ поведение одинаково - без fPIC возвращаемое значение из метода/функции после возврата совсем не то - а именно значение по умолчанию:)) - те значения не возвращаются. После компиляции с fPIC усе работает:))

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

2tvn (*) (2002-02-01 10:36:44.0):
Можно полюбопытствовать подробностями про систему/версию gcc/версию libc/
версию загрузчика?

Сдается мне, что проблема в багах gcc. Я недавно почитал про все это,
что нашел, так везде пишут, что без fPIC все должно работать, только
медленно и библиотеки не разделяются.

А у меня с c++ почему-то вообще не получается из одной .so вызвать статич. метод,
вкомпиленный в другую .so, независимо от опций компиляции. Просто валится.

GNU C Library stable release version 2.1.3
Compiled by GNU CC version 2.95.2 19991024 (release)
gcc version 2.95.2 19991024 (release)

Самое интересное, тот же самый код на c++, на тех же самых Qtях,
без проблем компилится в shared либу и отлично работает на True64,
(cxx, DIGITAL C++ V6.1-029 on DIGITAL UNIX V4.0 (Rev. 1091))

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