Запустите программу, созданную с помощью gcc8, в рабочей среде без gcc8. - PullRequest
0 голосов
/ 08 марта 2020

Все мои среды разработки / производства - CentOS-7.7. Чтобы скомпилировать мою программу с g cc -8.3.0, я установил "devtoolset-8" в моем развивающемся env, но его нельзя использовать так же, как g cc -4.8.5, который был поставляется с CentOS7 оригинально. Каждый раз, когда мне нужно скомпилировать программу, я должен использовать «scl enable devtoolset-8 - bash», чтобы переключиться на gcc8 вместо gcc4.8.5.

Когда программа была развернута на production-env , нет ни gcc8, ни libstdc ++. so.6.0.25, поэтому он не может работать. Я думаю, libstdc ++. So.6.0.25 должен быть выпущен с gcc8? Я не могу ни установить "devtoolset-8" в производящем env, ни собрать gcc8 из исходного кода в производящем env. Версией libstdc ++, которая может быть установлена ​​из официального репозитория CentOS yum, является libstdc ++. So.6.0.19, поэтому мои программы не могут быть загружены в производящем env. Как запустить такие программы?

Спасибо! Пожалуйста, прости мой уродливый Engli sh.

1 Ответ

4 голосов
/ 09 марта 2020

Чтобы не копировать или не отправлять отдельное libstdc++.so, а вместо этого статически связывать (как это предлагается в комментарии) со временем выполнения C++, можно связать C++ программы с -static-libstdc++ (также указав -static-libgcc также будет следить за тем, чтобы программа не зависела от достаточно недавней версии libgcc_s.so в системе - хотя это редко должно быть проблемой).

Также может быть проблема с целевой системой с версией glibc, которая слишком старая (относительно системы сборки). В этом случае можно каким-либо образом скомпилировать gcc независимо от того, какая из версий установлена ​​на более старой системе, так что полученные исполняемые файлы C++ и libstdc++ будут связаны со старыми glibc. Связывание C++ программ с -static-libstdc++ снова поможет не зависеть от программы, которая должна быть в состоянии найти libstdc++.so во время выполнения.

Наконец, программа C++ также может быть связана с -static не зависит от каких-либо динамических c библиотек вообще.

...