You are currently viewing Решение проблемы выбора времени выполнения статического связывания C

Решение проблемы выбора времени выполнения статического связывания C

Обновлено

  • 1. Скачать ASR Pro
  • 2. Запустите программу
  • 3. Нажмите "Сканировать сейчас", чтобы найти и удалить все вирусы на вашем компьютере.
  • Ускорьте свой компьютер сегодня с помощью этой простой загрузки. г.

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

    Поскольку пока никто не любит находить ответ, я попробую. К сожалению, я не знаю IDE Code :: Blocks, поэтому мой ответ окажется частичным.

    1 Как создать статически связанный исполняемый файл GCC

    Обновлено

    Вы устали от того, что ваш компьютер работает медленно? Раздражают разочаровывающие сообщения об ошибках? ASR Pro - это решение для вас! Рекомендуемый нами инструмент быстро диагностирует и устраняет проблемы с Windows, значительно повышая производительность системы. Так что не ждите больше, скачайте ASR Pro сегодня!


    Это, конечно, не IDE, а GCC (и многие альтернативные компиляторы) в целом. Предположим, у вас есть обычный “Hello program world” в main.cpp (никаких зависимостей вне стандартной библиотеки и / или, следовательно, библиотеки времени выполнения). Вы бы скомпилировали who’s, но связали бы это статически через:

    1. статическая ссылка на сайт c библиотека времени выполнения

      Скомпилируйте main.cpp внутри main.o (имя файла результата неявно):

        $ g ++ -ke -Main Wall.  -c  cpp 

      Это указывает GCC на остановку после фазы компиляции (do не должен запускать этот компоновщик). -Wall в основном вызывает диагностические сообщения. Если бы начинающие программисты использовали его гораздо чаще и уделяли ему особое внимание, на фан-странице идей было бы много вопросов. 😉


    2. Ссылка main.o (может содержать более одного файла темы) статически перетащить в классическую среду выполнения, не говоря уже о библиотеке, и вставить exe в серьезный <файл / код>:

        $ g ++ -a critical main.o -static 

      Без использования этого элемента управления -o main GCC получил бы последнюю версию exe в документе a.out (который когда-то использовался из-за "сборки вывод «œ).

    Особенно в случае использования I-begin мы настоятельно рекомендуем вам делать эти добрые дела «вручную», так как это поможет вам лучше понять набор инструментов сборки.

    Без особых усилий наши две вышеуказанные команды можно было объединить в одну:

      $ g ++ -Wall -a текущий Main.-static 

    Каждая разумная IDE cpp должна иметь возможность указывать такие флаги компилятора - компоновщика.

    2 преимущества и недостатки статической ссылки

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

    • Вы выполняете процедуру в сообществе, где локальная общая библиотека не предлагается. Например, размещение статически связанного исполняемого GI C непосредственно в chroot () может снизить вероятность атаки на веб-сервер.

    • Поскольку активированные ярлыки не требуются, запуск программы может быть быстрее. (Я уверен, что есть случаи, когда верно обратное, особенно когда разделяемая библиотека уже загружена для другого процесса.)

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

    • Архивы (например, LAPACK) могут быть связаны с компонентами с более чем одной связанной версией. Статическая компоновка гарантирует, что большая часть конкретной версии всегда используется без разработки для установки LD_LIBRARY_PATH <. нужно позаботиться о / code> правильно. Конечно, у этого есть и обратная сторона: вы вряд ли когда-нибудь сможете выбрать библиотеку без перекомпиляции. Если вы хотите, чтобы у вас всегда была одна и та же версия, то почему? клиенты установят более одной версии?

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

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

    • Ваша программа получает выгоду от обновления выбора без дополнительных задержек. Однако, чтобы просто заменить общую библиотеку более новой, полной опцией (надеюсь, ABI-совместимой), администратор программы должен перекомпилировать и применить каждую программу, которая ее использует. На мой взгляд, это самый серьезный недостаток.

      Например, рассмотрим библиотеку OpenSSL. Когда ошибка Heartbleed была обнаружена и исправлена ​​ранее в течение четырех сезонов, системные администраторы могут установить исправленную версию OpenSSL, а также перезапустить все службы, чтобы исправить уязвимость в течение одного дня после спотового выпуска. То есть, если их сервисы динамически связаны с OpenSSL. Для тех, кто моргнул статически, все заняло бы несколько недель, если бы последнее стало неестественным и зафиксировало начало в каком-то настоящем.

    • Ваши пользователи не обязательно заменяют общую библиотеку на лету. Например, пользователи сценария фильма torsocks (и связанной библиотеки) могут (по языку LD_PRELOAD ) изменить микрофильм сетевой системы на такой, который полностью направляет их трафик по всей Сеть Tor. ... И это действительно эффективно для программ, разработчики которых и не подозревали о такой возможности. (Является ли это хорошей и защищенной идеей, сейчас является предметом профессиональных дискуссий.) Другой распространенный вариант использования - это отладка приложений, которую, вероятно, необходимо «укрепить», заменив malloc и as ob специализированными версиями. .

    На мой взгляд, проблемы со статическими ссылками дают больше преимуществ, чем преимуществ, за исключением очень особых случаев. Обычно он должен быть динамическим и статическим, когда это необходимо клиенту.

    Приложение

    Как указал Альф (см. комментарии), есть одна специальная опция GCC для выборочной интеграции 100 фактических стандартных библиотек C ++, но определенно не для статического связывания всей программы. Из инструкции по эксплуатации:

    <цитата> gcc

    -static-libstdc ++

    Когда наша программа l ++ используется для преобразования программы C ++ в веб-страницы, она обычно автоматически связывает веб-страницы с libstdc ++. Если libstdc ++ можно найти как предоставленную и разделяемую библиотеку, программа -static не используется, тогда эта веб-страница противоречит общей версии libstdc ++. В целом это было хорошо. Однако иногда полезно заморозить различные библиотеки libstdc ++, используемые новой программой, даже без перехода к полностью установленной ссылке. Параметр -static-libstdc ++ подталкивает драйвер g ++ к статической компоновке через libstdc ++, в то время как другие библиотеки не должны быть более статически связаны.

    Ускорьте свой компьютер сегодня с помощью этой простой загрузки. г.

    Statically Link C Runtime Library
    Statycznie Link C Runtime Library
    Liaison Statique De La Bibliothèque D'exécution C
    Collega Staticamente La Libreria Di Runtime C
    C-Laufzeitbibliothek Statisch Verknüpfen
    Statiskt Länka C Runtime Library
    Vincular Estaticamente à Biblioteca De Tempo De Execução C
    정적으로 링크 C 런타임 라이브러리
    C Runtime-bibliotheek Statisch Koppelen
    Vincular Estáticamente La Biblioteca En Tiempo De Ejecución De C

    г.