Как работает совместное использование общего библиотека для систем Linux с различными инструментами?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как работает совместное использование общего библиотека для систем Linux с различными инструментами?

Сообщение Anonymous »

Я хотел бы понять, что именно происходит во время компиляции/времени выполнения, когда исполняемый файл C ++ пытается запустить на Linux. Я знаю, что это несколько расплывчато, поэтому я постараюсь быть более конкретным в следующих параграфах, но в некотором смысле это суммирует мой вопрос ... < /p>

Когда вы скомпилируете исполняемый файл C ++, который имеет зависимости (библиотеки), они поступают либо в статическом , либо общей форме (игнорируя вид только для заголовка). Затем вы можете принять их на них либо статически, либо динамически с тем, что вы создаете. Но это кажется правильным только в некоторой степени, так как, даже для самых простых программ, некоторые зависимости, например, libstdc ++. Итак, (что обычно сочетается с какой -то конкретной версией в вашей системе), Glibc.so и т. Д.
Это имеет смысл для меня, Поскольку код C ++ должен запускать «где -то», то есть Main не просто волшебным образом вызван, поэтому код, который фактически вызывает Main , должен быть где -то и находится в Glibc.so (вероятно?). Точно так же стандартная реализация C ++ должна быть где -то где -то, то есть Libstdc ++. Итак, .
Что мне не ясно, так это то, как «отделены» эти вещи друг от друга. Обычно ваше распределение Linux поставляется с какой -то версией GCC , давайте назовем это , но вы, конечно, свободны установить любые другие вместе с ним, скажем, 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.b .
Но дело в том, что, кажется, иногда я способен, а иногда нет.
Я знаю что ответ находится где -то в отношении (g) libc.so и libstdc ++. Итак, , а также все возможные флаги (, -fpie , -static-pie и т. Д.), Но мне очень трудно разбирать эти вещи и устанавливать правильные соединения.

Я ищу справочный запрос, так как я уверен, что я не первый человек, который когда -либо упал на это. Конечно, если кто -то готов ответить прямо здесь, то я более чем готов читать (но я не смог найти что -то удовлетворяющее на переполнении стека), но я уже был бы рад просто получить какой -то указатель, где я может прочитать об этом.

Подробнее здесь: https://stackoverflow.com/questions/793 ... t-toolchai
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»