|
|
|
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
|
|||
|---|---|---|---|
|
#18+
Есть задача - завернуть статическую либу в динамическу. Если кратко - 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 ____________ (перечисленные функции - из стстической либы) Как собрать правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2006, 14:01 |
|
||
|
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
|
|||
|---|---|---|---|
|
#18+
может, либу не может найти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2006, 14:13 |
|
||
|
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2006, 14:13 |
|
||
|
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
|
|||
|---|---|---|---|
|
#18+
maXmoможет, либу не может найти? Вопрос можно понять так: 1 Не может найти динамичемкую либу Ответ: нет. проблема именно в том, что не ресолвит функции, стат. либы, вызываемые ИЗ динамической. Причие функции динамич. либы (не юзающие функции статической) вызываются. 2 Не может найти статическую Ответ: при компиляции - находит. Задача вообще - чтобы в динамическую библиотеку линкоовался код статической либы, как это происходит с ним, когда собираешь просто исполняемый файл (с вызовами стат. либы).. Проблема - неизвестно как эту задачу решить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2006, 08:32 |
|
||
|
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
|
|||
|---|---|---|---|
|
#18+
Akh можешь попробовать почитать ПС: Сам я с этим пока не разбирался Ok, спасибо, покурю :) правда сходу то, что они предлагают-то, что увидел пробежав глазами по диагонали- не сильно нравится.. вроде как код менять придется... О результатах напишу сюда. Пока результата нет, если у кого есть короткие рецепты как справиться с описанным затруднением - пишете, пожалуйста :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2006, 08:40 |
|
||
|
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
|
|||
|---|---|---|---|
|
#18+
Вы в курсе, для чего нужен ключик -fPIC при компиляции ? Если исходники вашей статической либы компилировали без этого ключика, то даже если у вас получится запихать это в динамическую бибилиотеку, работать оно корректно скорее всего не будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2006, 09:08 |
|
||
|
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
|
|||
|---|---|---|---|
|
#18+
BarloneВы в курсе, для чего нужен ключик -fPIC при компиляции ? Если исходники вашей статической либы компилировали без этого ключика, то даже если у вас получится запихать это в динамическую бибилиотеку, работать оно корректно скорее всего не будет. нет, не в курсе (что-то там про адреса и смещения).. т.к., как и писал: [quot avg.Andrey] gcc нифига не знаю. [quot] Спасибо за информацию, к сожалению, неизвестно, как собиралась статическая либа, и возможности связаться с авторами нет. Такие условия, что дали, с тем и работаю. Пока могу придумать - только проверить.. (собрав и попробовав использовать) Проблема опять же - я даже собрать ее правильно не могу Можно конечно таки мануал прочитать по gcc и все самому понять, научиться и т.п., но очень хотелось бы просто в форуме ответ(ы) получить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 11:26 |
|
||
|
gcc: как собрать дин. либу с слинкованной в нее статической (т.е.".so" - обертка для ".a")
|
|||
|---|---|---|---|
|
#18+
Ну например так: ar x libtracker.a gcc -shared -o liblistener.so <перечисляем тут все .o получившиеся в результате выполнения первой сточки> только бесполезно это. На x86 будет работать только если библиотека нигде не использует статических переменных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2006, 12:01 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34126295&tid=2030045]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
168ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 447ms |

| 0 / 0 |
