Я портирую код на OpenBSD 5.0, и я столкнулся с этой очень странной проблемой.Почему OpenBSD G ++ делает заголовки системы по умолчанию связью C?
Мои настройки построения используют -isystem /usr/local/include
. Трудно вспомнить, но я считаю, что сделал это, чтобы избежать массовых предупреждений компилятора от моего использования -Wall
по типам систем - например, BSD - которые устанавливают Boost на /usr/local/include
. Это, похоже, отлично работает на FreeBSD.
Так возьмите следующую программу:
#include <boost/array.hpp>
int main()
{
return 0;
}
Затем построить его:
c++ -O2 -pipe -isystem /usr/local/include -std=c++98 -o test test.cxx
На OpenBSD я обнаружил, что я получаю:
In file included from /usr/include/g++/string:46,
from /usr/include/g++/stdexcept:44,
from /usr/local/include/boost/array.hpp:35,
from test.cxx:1:
/usr/include/g++/bits/stringfwd.h:48: error: template with C linkage
И становится только хуже от там.
я обнаружил, что я могу изменить сообщения об ошибках, делая такие вещи, как:
#include <stdexcept>
Но что толкает только проблему дальше назад. Это как если бы компилятор обертывал каждый включенный файл внутри блока extern "C"
.
До сих пор единственный способ работы, похоже, состоял в том, чтобы вернуться к использованию -I /usr/local/include
и принять шум от -Wall -W
.
Вопрос в том, почему OpenBSD это сделал? Это должен быть какой-то особый хак для GCC для лечения системы.
какая версия gcc вы используете? В стандартной версии версия gcc старше, чем версия на freebsd. Я считаю, что вы можете установить более позднюю версию на openbsd. Надеюсь это поможет – gda2004