LINUX.ORG.RU

Статическая сборка с boost на разных target


0

2

Ведется разработка софта в ходе которой используется boost, так как постоянно приходится собираться и запускаться на разных системах то возникло желание делать статическую линковку c boost.

Но, гложет одно НО. По факту у нас две абсолютно разные системы в эксплуатации, это древний CentOS и Ubuntu 10ка, и не выйдет ли боком что собрав статический boost на CentOS и попробовав его слинковать на Ubuntu все ляжет, а еще хуже рухнет в runtime?

Статически хотим линковаться потому, что у нас кроме boost еще рад библиотек, и это уже стало головной больше следить на всеми зависимостями при динамической линковке.


Если собираться одним и тем же тулчейном, то всё должно быть окей. Если наипнется, то и там, и там.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

не понял. Если я например на CentOS собираю boost_system.a, далее перетаскиваю ее на Ubuntu и линкуюсь с ней там, тревожит именно вот этот кейс

Cupper
() автор топика
Ответ на: комментарий от Cupper

у нас даже версии компиляторов разные будут. Это уже наверно совсем плохо.

Cupper
() автор топика
Ответ на: комментарий от Cupper

собери один тулчейн с нужными версиями библиотек и компиляторов и собирай им и там, и там. Внезапно, тулчейн может быть не только тот, что идёт с системой:

del@del-lmde:~$ ls /home/del/toolchains/
1.c        config      {i386-unknown-linux-gnu}  x86_64-unknown-linux-gnu
build.log  config.gen  {i686-unknown-linux-gnu}

del@del-lmde:~$ /home/del/toolchains/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-g++ --version|head -1
x86_64-unknown-linux-gnu-g++ (crosstool-NG 1.17.0) 4.7.2

del@del-lmde:~$ /home/del/toolchains/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/lib64/libc.so.6 |head -1
GNU C Library stable release version 2.14.1, by Roland McGrath et al.


del@del-lmde:~$ /home/del/toolchains/\{i686-unknown-linux-gnu\}/bin/i686-unknown-linux-gnu-g++ --version|head -1
i686-unknown-linux-gnu-g++ (GCC) 4.2.4

del@del-lmde:~$ /home/del/toolchains/\{i686-unknown-linux-gnu\}/i686-unknown-linux-gnu/lib/libc.so.6 |head -1
GNU C Library (crosstool-NG hg+default-4c8fd10c18e9) stable release version 2.9, by Roland McGrath et al.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

Чтобы указать, каким тулчейном собирать буст, тебе надо править ЕМНИП tools/build/v2/user-config.jam (либо $HOME/user-config.jam, я не помню, кто из них приоритетнее). Кароче google://boost cross-compile тебя спасёт.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

Я правильно понимаю что тулчейн это все необходимое для компиляции исходников ? Тобишь компилер, линкер, все стандартные библиотеки и хедеры ? И потом это еще нужно распространить все все систему где предполагается сборка ? Тогда уж проще на каждой из систем просто собрать все сторонние библиотеки.

Cupper
() автор топика
Ответ на: комментарий от Cupper

Я правильно понимаю что тулчейн это все необходимое для компиляции исходников ? Тобишь компилер, линкер, все стандартные библиотеки и хедеры ?

да

нужно распространить все все систему где предполагается сборка ?

Собираешь это всё один раз. Потом архивируешь в тарболл и распаковываешь на всех сборочных машинках. Единственное, директория должна быть такая же: то есть, если ты на машине, где собирал тулчейн, ставил его в /usr/local/mega_toolchain, то на остальных машинах тебе его надо будет распаковать тоже в /usr/local/mega_toolchain.

Тогда уж проще на каждой из систем просто собрать все сторонние библиотеки.

На мой взгляд, мой способ проще.

Правило довольно простое: берёшь наименьшие версии системных библиотек и компиляторов, делаешь из них кросс-тулчейн (например, с помощью crosstool-ng), собираешься везде им. И оно везде работает. Профит.

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от DELIRIUM

а что может страшного, и не только, произойти если все таки воспользоваться схемой

Собрали boost на CentOC c gcc 4.1. А потом собираем на другой таргет с другим gcc уже свой проект со статическими либами boost'a, принесеными с CentOS ?

Я так понимаю проблемы могут быть из за того если где то в бусте написано что то вроде

#ifdef CentOS
   // to do one
#else
   // to do another
#endif
Что еще может пойти не так ? Почему именно toolchain нужно тащить с собой?

Cupper
() автор топика
Ответ на: комментарий от Cupper

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

DELIRIUM ☆☆☆☆☆
()
Последнее исправление: DELIRIUM (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.