powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
8 сообщений из 8, страница 1 из 1
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
    #34119501
avg.Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть задача - завернуть статическую либу в динамическу.
Если кратко - JNI - обертка, для вызова данной поставщиком либы из java.

gcc нифига не знаю.

Делаю так (ногами не бить, как подсказали, та и делал):
(Что я хотел нижеприведенным сделать:
собрать GprsListener.cpp, юзающий либу libtracker.a в либу
liblistener.so):

gcc -fPIC -c GprsListener.cpp -o GprsListener.o -I./include/linux -I./include
gcc -shared -o liblistener.so -Llib -ltracker -lm GprsListener.o -lstdc++

Собирается. При вызове из java говорит, что не может найти вызываемую функцию (функцию из libtracker.a).

Тоже самое, при сборке теста:

gcc -c test.c
gcc test.o -L. -llistener -o restest -lstdc++

Ругается:

./liblistener.so: undefined reference to `LT_GetEvent()'
./liblistener.so: undefined reference to `LT_Start(unsigned short)'
./liblistener.so: undefined reference to `LT_Stop()'
collect2: ld returned 1 exit status
____________

(перечисленные функции - из стстической либы)


Как собрать правильно?
...
Рейтинг: 0 / 0
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
    #34119561
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может, либу не может найти?
...
Рейтинг: 0 / 0
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
    #34119562
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можешь попробовать почитать

ПС: Сам я с этим пока не разбирался
...
Рейтинг: 0 / 0
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
    #34122673
avg.Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmoможет, либу не может найти?

Вопрос можно понять так:

1 Не может найти динамичемкую либу
Ответ: нет. проблема именно в том, что не ресолвит функции, стат. либы, вызываемые ИЗ динамической. Причие функции динамич. либы (не юзающие функции статической) вызываются.

2 Не может найти статическую
Ответ: при компиляции - находит. Задача вообще - чтобы в динамическую библиотеку линкоовался код статической либы, как это происходит с ним, когда собираешь просто исполняемый файл (с вызовами стат. либы)..

Проблема - неизвестно как эту задачу решить
...
Рейтинг: 0 / 0
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
    #34122688
avg.Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh можешь попробовать почитать

ПС: Сам я с этим пока не разбирался

Ok, спасибо, покурю :)

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

О результатах напишу сюда.

Пока результата нет, если у кого есть короткие рецепты как справиться с описанным затруднением - пишете, пожалуйста :)
...
Рейтинг: 0 / 0
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
    #34122744
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы в курсе, для чего нужен ключик -fPIC при компиляции ? Если исходники вашей статической либы компилировали без этого ключика, то даже если у вас получится запихать это в динамическую бибилиотеку, работать оно корректно скорее всего не будет.
...
Рейтинг: 0 / 0
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
    #34126295
avg.Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BarloneВы в курсе, для чего нужен ключик -fPIC при компиляции ? Если исходники вашей статической либы компилировали без этого ключика, то даже если у вас получится запихать это в динамическую бибилиотеку, работать оно корректно скорее всего не будет.

нет, не в курсе (что-то там про адреса и смещения).. т.к., как и писал: [quot avg.Andrey]
gcc нифига не знаю.
[quot]

Спасибо за информацию, к сожалению, неизвестно, как собиралась статическая либа, и возможности связаться с авторами нет. Такие условия, что дали, с тем и работаю.

Пока могу придумать - только проверить.. (собрав и попробовав использовать)

Проблема опять же - я даже собрать ее правильно не могу
Можно конечно таки мануал прочитать по gcc и все самому понять, научиться и т.п., но очень хотелось бы просто в форуме ответ(ы) получить.
...
Рейтинг: 0 / 0
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
    #34126464
Barlone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну например так:
ar x libtracker.a
gcc -shared -o liblistener.so <перечисляем тут все .o получившиеся в результате выполнения первой сточки>
только бесполезно это. На x86 будет работать только если библиотека нигде не использует статических переменных.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]