Почему для скомпилированных двоичных файлов по-прежнему требуются libdb, BerkeleyDB и другие?

Я скомпилировал Bitcoin Core на одном Raspberry Pi из исходников после установки всех необходимых зависимостей, включая все libboost и BerkeleyDB. Это приложение работает нормально и bitcoindсчастливо живет в/usr/local/bin

Поэтому я попытался скопировать bitcoindи другие исполняемые файлы Биткойн из этого каталога на новый Raspberry Pi с совершенно новой чистой операционной системой, и приложения не запустились. У меня были ошибки, пока я не установил libboost и BerkeleyDB, а также все остальные зависимости на этот второй компьютер.

Я думал, что процесс компиляции сделал автономную исполняемую программу? Почему для скомпилированного бинарного файла по-прежнему требуются эти общие библиотеки?

Например, с сайта bitcoin.org можно загрузить исполняемые файлы, которые действительно автономны. Как я могу скомпилировать из исходного кода такой автономный исполняемый файл?

Для исполняемых файлов по-прежнему могут потребоваться библиотеки. Можно скомпилировать (или связать) эти библиотеки с самим исполняемым файлом, чтобы исполняемый файл стал действительно автономным. Это называется статически связанным двоичным файлом. На телефоне банкомат, не могу посмотреть подробности.

Ответы (1)

Стандартный процесс компиляции не включает статические зависимости в исполняемый файл. Это относится к установленной libdb, boost и т. д.

Это (библиотеки динамических ссылок) является эффективной концепцией. В противном случае каждый исполняемый файл, который использует, например, boost, потребует включения всей зависимости boost в двоичный файл.

«Официальные» двоичные файлы Bitcoin-Core, предлагаемые через bitcoin.org, представляют собой статически скомпилированные исполняемые файлы (они включают все). Это необходимо для получения независимости от Linux/дистрибутива, а также для полной сборки детерминированных двоичных файлов (безопасность/целостность).

Вы можете создать статически связанный биткойн самостоятельно, выполнив процесс сборки «зависит»: https://github.com/bitcoin/bitcoin/tree/master/depends .