2009-06-11 2 views
16

В Linux загружен источник программы и требуется, чтобы он был статически связан. Есть огромный Makefile там, яКак статически связать сложную программу

./configure 
make 

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

EDIT: причина в том, что для этого требуется, чтобы двоичный файл не имел зависимостей (или, по крайней мере, как можно меньше), что позволяло запускать на любом компьютере на базе Linux, даже без подключения к Интернету, и не обновленный Linux.

+1

Статическая связь считается вредной! http://people.redhat.com/drepper/no_static_linking.html Извините, это не прямой ответ на ваш вопрос, но я просто хотел указать на это. –

ответ

25

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

./configure --enable-static 
make 

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

./configure LDFLAGS=-static 
+0

Очень хороший ответ, к сожалению, оба не работали по какой-то причине. –

+0

Из того, что я понимаю, это не сработало, потому что мне не хватало статических библиотек для связи. –

+2

На CentOS пакетам, которые вам нужно установить для статической привязки, являются 'glibc-static' для c и' libstdC++ - static' для статического связывания C++. См. [Этот пост для дополнительной информации] (https://www.systutorials.com/5217/how-to-static-link-c-and-c-programs-on-linux-with-gcc/) –

5

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

1

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

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

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

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

2

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

+0

Отличная идея. У меня были очень хорошие результаты с аналогичным продуктом. –

Смежные вопросы