2017-02-17 14 views
1

Недавно я получил должность для разработки серверного приложения на C++, работающего в GNU/Linux и Unix, включая Solaris, HP-UX и т. Д. Поскольку моя компания собирается переписывать все с нуля, я думаю о том, как ее развивать с использованием современного C++.Это хорошая практика для связывания libstdC++ static?

К сожалению, из-за его закрытой платформы, похоже, что не всегда возможно получить спуск libstdC++ в компьютерах клиента. Я знаю, что libstdC++ имеет обратную совместимость, но отстой, что мне нужно настроить GCC 3.4 или 4.2 (в случае HP-UX), а их компилятор (Unix provider) - sucks.

К счастью, кажется, что некоторые люди утверждают, что linking libstdc++ statically is fine в порядке вещей, и someone рекомендует его технически. Однако я не уверен, что это безопасно (с точки зрения юридического и технического).

Можно ли связать libstdC++ static? Этот продукт предлагает исполняемую и разделяемую библиотеку для стороннего разработчика и не загружает стороннюю разделяемую библиотеку не в системную.

+0

Большой вопрос, я всегда задавался вопросом о юридических последствиях ... – Kupto

ответ

1

Мои 50 центов:

Я большой поклонник ссылки вещи статически (особенно на Windows), но цена является то, что в случае возникновения ошибки/проблемы безопасности, вы должны повторно корабль ваш продукт или предложить обновление. Я не хочу делать это в Linux/Unix, потому что вы, как правило, не имеете двоичной совместимости во всех операционных системах Unix. Если вы компилируете целевую систему, то это не имеет значения (за исключением того, что вы должны сами заботиться о багах с обновлениями).

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

Юридически, вы в порядке (отказ от ответственности, я не юрист, вы можете обратиться к адвокату вашей компании). GNU имеет exception на свои библиотеки Runtime:

Исходный код распространяется под лицензией GNU General Public License версия 3, с добавлением в соответствии с разделом 7 исключения описанных в «Exception GCC Runtime Library, версия 3,1” следующим образом (или см файл COPYING.RUNTIME)

Если бы это было не так, то никаких propietary продуктов не были бы когда-либо доступны на Linux.

Также вы можете рассмотреть возможность использования компилятора Clang, если вы обеспокоены лицензированием. Он имеет very tolerant BSD license. Ну, так как вы переписываете вещи с нуля.