Когда вы компилируете исполняемый файл C++, имеющий зависимости (библиотеки), они приходят либо в статической, либо в общей форме (игнорируя тип, содержащий только заголовок). Затем вы можете связать их статически или динамически с тем, что вы создаете. Но это кажется правильным лишь до некоторой степени, поскольку даже для самых простых программ существуют некоторые зависимости, например. libstdc++.so (который обычно имеет символическую ссылку на какую-то конкретную версию в вашей системе), glibc.so и т. д.
Для меня это имеет смысл, поскольку код C++ должен выполняться «где-то», т. е. main не вызывается просто волшебным образом, поэтому код, который на самом деле вызывает main, должен где-то находиться и находится в glibc.so (вероятно?). Точно так же стандартная реализация C++ должна где-то находиться, например, libstdc++.so.
Что мне не ясно, так это то, насколько «отделены» эти вещи друг от друга. Обычно ваш дистрибутив Linux поставляется с какой-либо версией gcc, назовем ее A, но вы, конечно, можете установить рядом с ней любую другую, скажем, B. Конечно, версия B будет содержать свою версию libc.so.B, libstdc++.so.B, libgcc_s.so и т. д.
Теперь я создаю исполняемый файл с помощью gcc-B, назову его b.out. Запуск ldd покажет (при условии, что я не указал ничего другого), что этому b.out нужны libc.so.B, libstdc++.so.B и т. д. Если я возьму b.out и перенесу его в систему только с набором инструментов A, то, по моему мнению, я не смогу его запустить, поскольку мне не хватает *.so. Б.
Но дело в том, что иногда мне кажется, что я могу, а иногда нет.
Я знаю, что ответ лежит где-то в отношении (g)libc.so и libstdc++. so, а также все возможные флаги (
Код: Выделить всё
-static
Я ищу запрос на рекомендацию, так как уверен, что я не первый человек, который когда-либо сталкивался с этим. Конечно, если кто-то готов ответить прямо здесь, я более чем готов прочитать (но я пока не смог найти ничего удовлетворительного в Stack Overflow), но я уже был бы рад просто получить указатель, где я можете прочитать об этом.
Подробнее здесь: https://stackoverflow.com/questions/793 ... t-toolchai