Как статически связать сложную программу - PullRequest
20 голосов
/ 12 июня 2009

В Linux скачали исходный код программы и хотите, чтобы он был статически связан. Есть огромный Makefile там, Я

./configure
make

для компиляции. Это слишком общий вопрос, чтобы спросить, но как я могу сделать двоичный файл статически связанным?

РЕДАКТИРОВАТЬ: причина этого заключается в том, чтобы убедиться, что двоичный файл будет не имеют зависимостей (или, по крайней мере, как можно меньше), что позволяет запускать на любом компьютере под управлением Linux, даже на компьютере без подключения к Интернету, и не обновленном Linux.

Ответы [ 4 ]

29 голосов
/ 12 июня 2009

Большинство autoconf сгенерированный configure скрипт позволит вам сделать статическую сборку:

 ./configure --enable-static
 make

Если это не сработает, вы можете передать флаги компоновщика через LDFLAGS, например:

 ./configure LDFLAGS=-static
5 голосов
/ 12 июня 2009

Да, вам нужно отредактировать файл make и добавить параметр -static в gcc во время ссылки.

2 голосов
/ 12 июня 2009

Если вы не можете скомпилировать статический двоичный файл, я получил хорошие результаты, используя Statifier .

1 голос
/ 12 июня 2009

Я предполагаю, что он использует gcc для компиляции ряда программ на c, хотя вам придется поискать в Makefile, чтобы узнать.

Если это так, вы можете настроить строки gcc в make-файле для статического связывания, хотя в зависимости от структуры программы это может быть сложным изменением. Посмотрите на man gcc, чтобы увидеть, как это делается.

Мне было бы интересно узнать, почему вы статически связываете. Рассматривали ли вы вместо этого использование предварительной ссылки?

Вы должны знать, что при этом могут возникнуть проблемы с лицензией, если все компоненты не соответствуют требованиям GPL.

...