MyTetra Share
Делитесь знаниями!
Как скомпилировать программу статически или с определенным путем к библиотекам
Время создания: 11.11.2014 14:54
Текстовые метки: linux, windows, C, C++, компиляция, статическая линковка
Раздел: Компьютер - Программирование - Компилятор GCC
Запись: xintrea/mytetra_syncro/master/base/1415706876ti9ichenxk/text.html на raw.github.com

Как сделать сборку программы так, чтобы она не требовала системных библиотек?



Вариант 1


LD_LIBRARY_PATH и/или -Wl,-rpath спасут отца русской демократии


в GNU-окружении (приплетать сюда все слово линакс не совсем корректно) уже есть способ контроля версий: -Wl,-soname.



Вариант 2


(Для Linux и Qt)


На винде проще простого, либы в одну директорию с программой положить и всё. В Linux либо запускать из shell-скрипта с выставленной переменной LD_LIBRARY_PATH, либо вшивать относительный путь к библиотекам прямо в бинарник с помощью флагов ld. Со всем нужным экранированием в qmake это будет выглядеть так:


unix:!macx {

QMAKE_LFLAGS += '-Wl,-rpath,\'\$$ORIGIN/libs\',-z,origin'

}


Добавляет ./libs в путь, в котором линуксовый бинарник ищет библиотеки.



Внимание! Эти методы не позволяют сделать по-настоящему статическую сборку программы. В любом случае, программа будет исполняться на коде ядра и на системной библиотеке. И если прикрепленные к программе библиотеки на смогут работать в таком окружении, то и программа работать не будет.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования