LINUX.ORG.RU

static lib объединение

 


0

2

Всем привет. Есть библиотека libB, которая юзает несколько либ libA1, libA2, libA3. Все статические. Когда я линкую библиотеку libB к новому проекту, мне приходится еще линковать те статические библиотеки libA1,libA2 и libA3. Почему так? Можно ли что-то с этим поделать?

Можно ли что-то с этим поделать?

Можно ступить на скользкий путь partial/incremental linking (ld -r).

const86 ★★★★★
()

Распакуй ar'ом все четыре библиотеки в одно место и запакуй всё хозяйство в одну

Gvidon ★★★★
()

Есть библиотека libB, которая юзает несколько либ libA1, libA2, libA3. Все статические

Ок

Когда я линкую библиотеку libB к новому проекту, мне приходится еще линковать те статические библиотеки libA1,libA2 и libA3. Почему так?

o_O А что должно быть как-то по-другому? Если Б использует А, а ты используешь Б, то ты используешь и А. Логично?

no-such-file ★★★★★
()

Почему так?

Потому что статическая библиотека - не более чем архив с .o и в ней нет никакой информации о зависимостях.

Можно ли что-то с этим поделать?

- Продолжать явно указывать нужные библиотеки - Перейти на динамические - Использовать libtool - оно кладёт рядом со статическими либами файл .la в котором описываются зависимости. Но только libtool - убогий неработающий костыль, никогда его не используй.

slovazap ★★★★★
()

Почему так?

Библиотеке libB нужен код, который хранится в libXXX

Можно ли что-то с этим поделать?

Да: смержить библиотеки libXXX в одну. Вот, откопал в bash_history:

$ ll
total 219M
-rw-rw-r-- 1 me me  13M Apr  2 17:46 libopencv_calib3d.a
-rw-rw-r-- 1 me me  22M Apr  2 17:46 libopencv_contrib.a
-rw-rw-r-- 1 me me  23M Apr  2 17:46 libopencv_core.a
-rw-rw-r-- 1 me me 1.6K Apr  2 17:46 libopencv_core_pch_dephelp.a
-rw-rw-r-- 1 me me  16M Apr  2 17:46 libopencv_features2d.a
-rw-rw-r-- 1 me me 6.2M Apr  2 17:46 libopencv_flann.a
-rw-rw-r-- 1 me me  15M Apr  2 17:46 libopencv_gpu.a
-rw-rw-r-- 1 me me 2.3M Apr  2 17:46 libopencv_haartraining_engine.a
-rw-rw-r-- 1 me me  13M Apr  2 17:46 libopencv_highgui.a
-rw-rw-r-- 1 me me 1.6K Apr  2 17:46 libopencv_highgui_pch_dephelp.a
-rw-rw-r-- 1 me me  27M Apr  2 17:46 libopencv_imgproc.a
-rw-rw-r-- 1 me me 1.6K Apr  2 17:46 libopencv_imgproc_pch_dephelp.a
-rw-rw-r-- 1 me me  33M Apr  2 17:46 libopencv_legacy.a
-rw-rw-r-- 1 me me 7.4M Apr  2 17:46 libopencv_ml.a
-rw-rw-r-- 1 me me 2.4M Apr  2 17:46 libopencv_nonfree.a
-rw-rw-r-- 1 me me  12M Apr  2 17:46 libopencv_objdetect.a
-rw-rw-r-- 1 me me 1.4M Apr  2 17:46 libopencv_photo.a
-rw-rw-r-- 1 me me 1.6K Apr  2 17:46 libopencv_photo_pch_dephelp.a
-rw-rw-r-- 1 me me 3.4M Apr  2 17:46 libopencv_softcascade.a
-rw-rw-r-- 1 me me  13M Apr  2 17:46 libopencv_stitching.a
-rw-rw-r-- 1 me me 8.9M Apr  2 17:46 libopencv_ts.a
-rw-rw-r-- 1 me me 5.7M Apr  2 17:46 libopencv_video.a
-rw-rw-r-- 1 me me 1.6K Apr  2 17:46 libopencv_video_pch_dephelp.a
$ ar t libopencv_core.a 
command_line_parser.cpp.o
stat.cpp.o
system.cpp.o
out.cpp.o
glob.cpp.o
alloc.cpp.o
gpumat.cpp.o
...
$ for i in *.a; do ar -x $i; done                                                                                                                       
$ ar cr libopencv.a *.o                                                                                                                               
$ rm *.o
$ ar t libopencv.a 
3dtracker.cpp.o
accum.cpp.o
adaptiveskindetector.cpp.o
...
$ ll
total 424M
-rw-rw-r-- 1 me me 205M Apr  2 17:48 libopencv.a
-rw-rw-r-- 1 me me  13M Apr  2 17:46 libopencv_calib3d.a
-rw-rw-r-- 1 me me  22M Apr  2 17:46 libopencv_contrib.a
-rw-rw-r-- 1 me me  23M Apr  2 17:46 libopencv_core.a
-rw-rw-r-- 1 me me 1.6K Apr  2 17:46 libopencv_core_pch_dephelp.a
-rw-rw-r-- 1 me me  16M Apr  2 17:46 libopencv_features2d.a
-rw-rw-r-- 1 me me 6.2M Apr  2 17:46 libopencv_flann.a
-rw-rw-r-- 1 me me  15M Apr  2 17:46 libopencv_gpu.a
-rw-rw-r-- 1 me me 2.3M Apr  2 17:46 libopencv_haartraining_engine.a
-rw-rw-r-- 1 me me  13M Apr  2 17:46 libopencv_highgui.a
-rw-rw-r-- 1 me me 1.6K Apr  2 17:46 libopencv_highgui_pch_dephelp.a
-rw-rw-r-- 1 me me  27M Apr  2 17:46 libopencv_imgproc.a
-rw-rw-r-- 1 me me 1.6K Apr  2 17:46 libopencv_imgproc_pch_dephelp.a
-rw-rw-r-- 1 me me  33M Apr  2 17:46 libopencv_legacy.a
-rw-rw-r-- 1 me me 7.4M Apr  2 17:46 libopencv_ml.a
-rw-rw-r-- 1 me me 2.4M Apr  2 17:46 libopencv_nonfree.a
-rw-rw-r-- 1 me me  12M Apr  2 17:46 libopencv_objdetect.a
-rw-rw-r-- 1 me me 1.4M Apr  2 17:46 libopencv_photo.a
-rw-rw-r-- 1 me me 1.6K Apr  2 17:46 libopencv_photo_pch_dephelp.a
-rw-rw-r-- 1 me me 3.4M Apr  2 17:46 libopencv_softcascade.a
-rw-rw-r-- 1 me me  13M Apr  2 17:46 libopencv_stitching.a
-rw-rw-r-- 1 me me 8.9M Apr  2 17:46 libopencv_ts.a
-rw-rw-r-- 1 me me 5.7M Apr  2 17:46 libopencv_video.a
-rw-rw-r-- 1 me me 1.6K Apr  2 17:46 libopencv_video_pch_dephelp.a
$ 

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

еще есть «ar r», короче man ar, как уже написали.

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