Название: Как собрать приложение без зависимостей? Отправлено: juvf от Ноябрь 07, 2009, 09:17 Ну в общем вопрос в теме.
Я собрал программу myprog. ldd показал много зависимостей, среди них "libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb7f65000)". При переносе на др эвм могут возникнуть проблемы. Есть наверно много решения этой проблемы, но мне интересны следующие 2 варианта: 1) Собрать приложение так, чтоб всё, что нужно программе myprog от libpng12 вкомпелялось в myprog. Попробывал сделать так: создал копию библиотеки libpng12.so.0 и добавил список индексов Код: #ar cr /mylibs/libmypng.a /usr/lib/libpng12.so.0 Код: LIBS = $(SUBLIBS) /usr/local/Trolltech/Qt4.5.3-static/lib /usr/local/lib/boost-1_35/debug/link-static/threading-multi/libboost_thread-gcc34-mt-d.a /usr/local/lib/boost-1_35/debug/link-static/threading-multi/libboost_system-gcc34-mt-d.a /usr/local/lib/boost-1_35/debug/link-static/threading-multi/libboost_date_time-gcc34-mt-d.a -lQtSvg -L/usr/local/Trolltech/Qt4.5.3-static/lib -L/usr/X11R6/lib -pthread -pthread -pthread -pthread -pthread -pthread -pthread -pthread -lQtXml -pthread -pthread -lQtGui -pthread -lpng -lfreetype -lSM -lICE -pthread -pthread -lXrender -lfontconfig -lXext -lX11 -lQtNetwork -pthread -pthread -lQtCore -lz -lm -pthread -lgthread-2.0 -lrt -lglib-2.0 -ldl -lpthread Код: LIBS = $(SUBLIBS) -L/mylibs/libmypng.a -L/usr/local/Trolltech/Qt4.5.3-static/lib /usr/local/lib/boost-1_35/debug/link-static/threading-multi/libboost_thread-gcc34-mt-d.a /usr/local/lib/boost-1_35/debug/link-static/threading-multi/libboost_system-gcc34-mt-d.a /usr/local/lib/boost-1_35/debug/link-static/threading-multi/libboost_date_time-gcc34-mt-d.a -lQtSvg -L/usr/local/Trolltech/Qt4.5.3-static/lib -L/usr/X11R6/lib -pthread -pthread -pthread -pthread -pthread -pthread -pthread -pthread -lQtXml -pthread -pthread -lQtGui -pthread -lfreetype -lSM -lICE -pthread -pthread -lXrender -lfontconfig -lXext -lX11 -lQtNetwork -pthread -pthread -lQtCore -lz -lm -pthread -lgthread-2.0 -lrt -lglib-2.0 -ldl -lpthread Код: ... 2) Второй вариант - это оставить библиотеки подгружаемые, но чтоб эти библиотеки брались не из /usr/lib, а разместить их в папке с приложением и указать линкеру что, этот png12 лежит в "рабочей_дериктории_myprog/libs" Т.е. всё что нужно моей программе будет у неё, и не будет зависить от установленных пакетов в системе. ну и чтоб ldd показал что-то нечто "libpng12.so.0 => /opt/myprog/lids/libpng12.so.0" или еще лучше "libpng12.so.0 => ./lids/libpng12.so.0". Я этот вариант тоже пробовал, удалил в Makefile "-lpng12" и в самом начала строки с либами прописал Код: LIBS = $(SUBLIBS) /opt/myprog/libs lpng12 ... В общем есть ли у кого практический опыт подобных сборок? подскажите, что я делаю не так? ps речь идет о *nix ос. А всё это делал в Debian 5.0.2 Название: Re: Как собрать приложение без зависимостей? Отправлено: kuzulis от Ноябрь 07, 2009, 14:31 ИМХО, не нужно ничего статически собирать.
Я, если честно, устал уже от повторения одного и того-же правила (концепции) *.nix : мухи должны быть отдельно от котлет!!! Если та планируешь распростанять прогу под Дебиан - то , будь добр, собери дебовский пакет из своей проги, в зависимостях которого укажи libpng . И тогда тот человек, который будет устанавливать твой пакет - сразу поймет, есть ли у него нужные библиотеки или нет, т.к. менеджер пакетов дебиана скажет человеку о том, что ему необходимо доустановить еще какие-то библиотеки по зависимостям. Если собираешься распространять для других дистрибутивов - то тут нужно кого-то просить, стобы он собрал пакет для конкретного дистрибутива и т.п. Или же - просто создал специальный файл типа SPEC и т.п. Я, допустим могу помочь в создании "спека" PKGBUILD для ArchLinux ... В общем, думаю, идея ясна. :) Название: Re: Как собрать приложение без зависимостей? Отправлено: Alex Custov от Ноябрь 07, 2009, 16:53 подскажите, что я делаю не так? пытаешься применить windows-way в Linux. В Linux принято собирать пакеты под дистрибутивы, хотя бы с помощью checkinstall |