LINUX.ORG.RU

Статическая линковка с Poco

 , ,


0

1

Здравствуйте!

Решил статически слинковать библиотеки Poco со своим приложением.

Для этого, я статически собрал openssl

openssl-1.0.1t
./config no-shared --prefix=/opt/libs/


И статически собрал Poco[br]
./configure --prefix=/opt/libs/ --static --include-path=/opt/libs/include --library-path=/opt/libs/

Теперь пытаюсь статически слинковать свое приложение[br]
g++ -Iinclude /opt/libs/libcrypto.a /opt/libs/libssl.a /opt/libs/libPocoNetSSL.a /opt/libs/libPocoData.a /opt/libs/libPocoFoundation.a /opt/libs/libPocoCrypto.a /opt/libs/libPocoJSON.a /opt/libs/libPocoNet.a /opt/libs/libPocoNetSSL.a /opt/libs/libPocoUtil.a Main.cpp  -o test 

Вываливается куча ошибок линкера, хотя все функции присутствуют в указанных либах.[br]

Подскажите пожалуйста, что не так?


Последнее исправление: hobbit (всего исправлений: 5)

У GCC есть одна фича которая меня лично раздражает, ему нужно в правильном порядке перечислять файлы при линковке - попробуйте поменять очередность (чтобы библиотеки верхнего уровня шли в начале а нижнего в конце)

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

Main.cpp и -o test оставь в начале, все .a перенеси в конец. Если не хватает символа, ищи его в указанных .a файлах. Тот, в котором найдёшь (он там должен быть определён, а не просто упомянут), переносишь в конец строки вызова. Повторяешь, пока не сойдётся.

i-rinat ★★★★★
()

/opt/libs/libcrypto.a /opt/libs/libssl.a /opt/libs/libPocoNetSSL.a

Местами поменяй. ЕМНИП, сначала poco, а после ssl, т.е. те символы, которые используются в предыдущей библиотеке.

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

Это не фича «gcc», а недостаток линковщика (ld)

Нет. Это правило, по которому работает линковщик

Можно попробовать gold заюзать.

У него правила такие же, плюс он строже к транзитивной линковке .so

annulen ★★★★★
()

В poco ошибка для статического конфига. Надо добавить -fPic к опциям gcc, как делается не помню, но не стандартными способами, где то в сурс три есть конфиг который надо поправить, проблема вроде гуглиться а я сейчас с мобилки.

pon4ik ★★★★★
()

Всем спасибо.
Может кому-то пригодится. Собралось у меня так:

g++ -Iinclude -Llib -static-libstdc++ Main.cpp libPocoNetSSL.a  libPocoCrypto.a libssl.a libcrypto.a  libPocoUtil.a libPocoData.a libPocoJSON.a libPocoXML.a libPocoNet.a libPocoFoundation.a -o test -ldl -lpthread -Wl,--as-needed 

pulya
() автор топика

Отпишись, как у тебя впечатления о Poco. Это одна из тех дохрена библиотек, которые я всё мечтаю попробовать, да руки не доходят...

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

Я использовал на предыдущей работе. Библиотека вроде бы ничего, но есть свои недостатки.
Что понравилось:
- удобный фреймворк для логов
- хороший набор алгоритмов со строками

Что не понравилось:
- у них своеобразное понимание ООП. В некоторый классах (допустим Application, CoreApplication) намудрили с методами. Деталей не помню, но когда точно ожидаешь, что метод по дизайну должен быть virtual, а он нет, то это подвох.
- У http нет поддержки асинхронности

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