The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Как слинковать в приложении статическую и динамическую библи..."
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Как слинковать в приложении статическую и динамическую библи..."
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 02-Дек-04, 17:14  (MSK)
Hi, all.
Собственно вопрос в следующем. Как слинковать в одно приложение статическую и динамическую библиотеки?

Ситуация такая. Есть приложение myapp.c ему нужна для работы моя библиотека libmylib.so and libxml2.so. При этом libmylib.so должна линковаться динамически и находиться в том же каталоге, что и myapp, а libxml2.so должна быть вкомпилена в myapp статически. До того, как я сделал libmylib.so,  я работал с libxml2, и линковал её как динамически:
$gcc -o myapp myapp.c `xml2-config --libs`
, так и статически
$gcc -o myapp myapp.c -static `xml2-config --libs`
.
libmylib.so я тоже могу слинковать динамически. При попытке добавить ключ -static, линкер говорит, что lmylib не найдена, что, как я понимаю, правильно, т.к. у меня нет libmylib.a.

Обе библиотеки я могу скомпоновать динамически:
$gcc -c -o myapp.o myapp.c
$gcc -o myapp myapp.o -L. -lmylib -Wl,-rpath,./ `xml2-config --libs`

Но при попытке слинковать libmylib.so динамически, а libxml2 статически, я получаю Segmentation failed при запуске myapp, хотя компоновка проходит без проблем:

$gcc -c -o myapp.o myapp.c
$gcc -o myapp myapp.o -shared -L -lmylib -Wl,-rpath,./ -static `xml2-config --libs`
.

Как побороть?

Спасибо.

ЗЫ Принимаются любые советы, вплоть до поменять местами параметры(уже менял), поскольку свои идеи уже на исходе.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Как слинковать в приложении статическую и динамическую библи..."
Сообщение от gyn61 Искать по авторуВ закладки(ok) on 02-Дек-04, 19:05  (MSK)
Можно

$gcc -o myapp myapp.c ./libmylib.so -static `xml2-config --libs`

но при запуске программы каталог с libmylib.so должен быть текущим

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Как слинковать в приложении статическую и динамическую библи..."
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 04-Дек-04, 13:43  (MSK)
>Можно
>
>$gcc -o myapp myapp.c ./libmylib.so -static `xml2-config --libs`
>
>но при запуске программы каталог с libmylib.so должен быть текущим

Спасибо, но не помогает:(. при компиляции-линковке всё ок, но при запуске:

-bash: ./myapp: /usr/lib/libc.so.1: bad ELF interpreter: No such file or directory

К чему это? Нет ли ещё идей?

В любом случае спасибо огромное. Хоть какая-то новая информация. Буду искать.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Как слинковать в приложении статическую и динамическую библи..."
Сообщение от gyn61 Искать по авторуВ закладки(ok) on 04-Дек-04, 16:06  (MSK)
А что говорит ldd myapp
  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Как слинковать в приложении статическую и динамическую библи..."
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 04-Дек-04, 16:27  (MSK)
>А что говорит ldd myapp
Тоже самое.
[root@websitebuilder work]# ldd myapp
/usr/bin/ldd: ./myapp: /usr/lib/libc.so.1: bad ELF interpreter: No such file or directory

Там (in /usr/lib) есть libc.so, но нет никакого libc.so.1:(, я гуглил по кейворду : /usr/lib/libc.so.1: bad ELF interpreter: No such file or directory, но ничего, кроме идеи сделать ссылку на эту либу (libc.so) и обозвать её(ссылку) lib.so.1 не нашёл. Но это не помогает. Он говорит
-bash: ./myapp: Accessing a corrupted shared library.

К чему это всё и как с этим бороться? У кого нить есть идеи?
Спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Как слинковать в приложении статическую и динамическую библи..."
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 09-Дек-04, 18:36  (MSK)
Господа. Если есть возможность -- помогите советом. Не знаю, что делать. Проблема остаётся открытой.
  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Как слинковать в приложении статическую и динамическую библи..."
Сообщение от Pablo Искать по авторуВ закладки on 09-Дек-04, 18:52  (MSK)
>Господа. Если есть возможность -- помогите советом. Не знаю, что делать. Проблема
>остаётся открытой.

попробуй при компиляции указать не -lxml2 а подсунуть ему libxml2.a
у меня он лежит в /usr/lib/

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Как слинковать в приложении статическую и динамическую библи..."
Сообщение от Андрей emailИскать по авторуВ закладки(??) on 09-Дек-04, 19:40  (MSK)
>>Господа. Если есть возможность -- помогите советом. Не знаю, что делать. Проблема
>>остаётся открытой.
>
>попробуй при компиляции указать не -lxml2 а подсунуть ему libxml2.a
>у меня он лежит в /usr/lib/

Огромное спасибо. Вроде бы простой выход, а сам не догадался. Похоже это то, что нужно.
Ещё раз огромное спасибо.

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру