я писал, как я это делал. Не уверен, что очень уж универсально. RS>Компилятор у меня gcc 2.95.4, с 3.3.x тоже работает. Линукс.
Угу, как вариант, если нужно несколько функций вытащить. Если же целиком переделать — то, имхо, проще разобрать .a и собрать из объектников .so, как выше написал.
как собрать .a библиотеки в so
От:
Аноним
Дата:
20.03.06 20:02
Оценка:
Сабж?
Есть модуль, который состоит из нескольких подмодулей.
Каждый из подмодулей собирается в файлик libXXX.a
Как это все скрутить в одну so библиотеку?
Пока что у меня получается so-шка размером 6кб, которая не содержит ничего из нужных библиотек...
Игрался с разными флагами, но нифига не получилось
Подмодули собрались нормально (во всяком случае если их линковать к бинарнику, то все ок)
Кстати, конструкция "-shared -Wl,-soname,Lib/$(DLL_PARSERS)" почему то не подставляет нужное имя без "-o Lib/$(DLL_PARSERS)"
флаг -l<имя> тоже не помогает
пробовал "-Wl,-allextract" (вычитал в соляровском мане) — без толку
Кстати нужно это уметь собирать под солярой и под линуксом (флаги могут быть различные, так что за универсальностью гнаться не обязательно)
Здравствуйте, Kemm, Вы писали:
K>Угу, как вариант, если нужно несколько функций вытащить. Если же целиком переделать — то, имхо, проще разобрать .a и собрать из объектников .so, как выше написал.
Угу. И закономерный вопрос: можно ли сделать то же, что я сделал, но покрасивше?
ну и конечно же все модули из статическиз библиотек собраны с picом??? -- иначе смысла в этом не дофига... и по хорошему тебе сошку не должны дать собрать
Re[2]: как собрать .a библиотеки в so
От:
Аноним
Дата:
21.03.06 10:35
Оценка:
Здравствуйте, Kemm, Вы писали:
K>Здравствуйте, Аноним, Вы писали:
K>Маны читать полезно, как выяснилось. Правильный способ:
Согласен....
только в манах пока нужное откопаешь... особенно если не знать где искать...
Другое дело МСДН K>
K>Таким образом из ${STATIC_LIBS} будет создана libmylib.so, к которой обычным образом будут прилинкованы ${COMMON_LIBS}
Спасибо помогло...
еще детально не щупал, но судя по размеру и контенту туда залилось много
Здравствуйте, Аноним, Вы писали:
K>>Маны читать полезно, как выяснилось. Правильный способ: А>Согласен.... А>только в манах пока нужное откопаешь... особенно если не знать где искать...
man gcc, далее по ссылкам — куда уж проще.
А>Другое дело МСДН
Бюээ. Извините. Смотрел я на тот ваш msdn, пока нужное нашел — чуть не плюнул на затею спортировать простенький сервер на винду, так бы и собирался цыгвином до сих пор.
PS: Дайте мне права модератора — я сам себя отмодерирую. 8))
Re: как собрать .a библиотеки в so
От:
Аноним
Дата:
21.03.06 18:44
Оценка:
Возвращаясь к проблеме (наконец то руки дошли....)
Акцент на 2 последних параметра. Замечу, что libxml2 у меня динамическая библиотека, а libantlr — статическая.
Этот кусок линкуется без ошибок.... НО!!!!
$ nm libp1.a | grep xmlReadFile
U xmlReadFile
Что в целом логично, т.к. там эта функция запускается
Я еще могу понять это:
$ nm libparsers.so | grep xmlReadFile
U xmlReadFile
Что в целом тоже логично, так как я пытаюсь линковаться с динамической библиотекой
Но почему когда я пытаюсь слинковать бинарник с libparsers.so (который поидее должен быть слинкован с libxml2.so.2) я имею кучу нерезолвленых символов.
Тоже самое касается символов из libantlr.a
Или даже при линкове своей программы я обязан указывать все библиотеки, от которых зависят библиотеки программы? (во каламбур?)
Re[2]: как собрать .a библиотеки в so
От:
Аноним
Дата:
21.03.06 18:54
Оценка:
А>Но почему когда я пытаюсь слинковать бинарник с libparsers.so (который поидее должен быть слинкован с libxml2.so.2) я имею кучу нерезолвленых символов.
А>Тоже самое касается символов из libantlr.a
Кстати слинковаться с so-шкой у меня получилось выставив перед компиляцией LD_LIBRARY_PATH на директорию с libxml2.so.2....
Только я не могу понять при чем тут это?
хорошо что у тя все там получилось... но в целом ме не оч понятно очего бы не заюзать autoconf/automake + libtool -- все эти дурацкие проблемы исчезают -- я не представляю себе проекта без этих тулзов в особенности если он (или "... даже если он немного...") сложнее чем Hello World...
... появлябтся другие еси ты не в теме
---
Здравствуйте, Аноним, Вы писали:
А>Сабж?
А>Есть модуль, который состоит из нескольких подмодулей. А>Каждый из подмодулей собирается в файлик libXXX.a А>Как это все скрутить в одну so библиотеку?
А>Пока что у меня получается so-шка размером 6кб, которая не содержит ничего из нужных библиотек... А>Игрался с разными флагами, но нифига не получилось
А>макефиле у меня приблизительно такой:
А>
А>Подмодули собрались нормально (во всяком случае если их линковать к бинарнику, то все ок) А>Кстати, конструкция "-shared -Wl,-soname,Lib/$(DLL_PARSERS)" почему то не подставляет нужное имя без "-o Lib/$(DLL_PARSERS)" А>флаг -l<имя> тоже не помогает А>пробовал "-Wl,-allextract" (вычитал в соляровском мане) — без толку
А>Кстати нужно это уметь собирать под солярой и под линуксом (флаги могут быть различные, так что за универсальностью гнаться не обязательно)
А>>Но почему когда я пытаюсь слинковать бинарник с libparsers.so (который поидее должен быть слинкован с libxml2.so.2) я имею кучу нерезолвленых символов. А>>Тоже самое касается символов из libantlr.a А>Кстати слинковаться с so-шкой у меня получилось выставив перед компиляцией LD_LIBRARY_PATH на директорию с libxml2.so.2.... А>Только я не могу понять при чем тут это?
Тема для медитации: ldd libparsers.so что выводит без установленой LD_LIBRARY_PATH и с установленой.
Здравствуйте, zaufi, Вы писали:
Z>хорошо что у тя все там получилось... но в целом ме не оч понятно очего бы не заюзать autoconf/automake + libtool -- все эти дурацкие проблемы исчезают -- я не представляю себе проекта без этих тулзов в особенности если он (или "... даже если он немного...") сложнее чем Hello World...
Куда там автоконф-то? В исходной задаче вообще не говорилось, что есть исходники статических либ, из которых динамическую сделать нужно. Если есть исходники — очевидно, что проще из них все сразу собрать.
Re[4]: как собрать .a библиотеки в so
От:
Аноним
Дата:
22.03.06 07:26
Оценка:
Здравствуйте, Kemm, Вы писали: А>>>Но почему когда я пытаюсь слинковать бинарник с libparsers.so (который поидее должен быть слинкован с libxml2.so.2) я имею кучу нерезолвленых символов. А>>>Тоже самое касается символов из libantlr.a А>>Кстати слинковаться с so-шкой у меня получилось выставив перед компиляцией LD_LIBRARY_PATH на директорию с libxml2.so.2.... А>>Только я не могу понять при чем тут это?
K>Тема для медитации: ldd libparsers.so что выводит без установленой LD_LIBRARY_PATH и с установленой.
Не, ну понятное дело, что без установленой ldd не находит либхмл....
Я только не пойму почему он смотрит в эту переменуную в момент линковки? Чем ему не нравится ключ -L?
Насколько я понимаю переменная LD_LIBRARY_PATH должна играть рояль только при запуске...
Или я не прав?