Ошибки в ссылках при компиляции смешанного проектного объекта C / C ++ с поддержкой C ++ 11 в xcode 4.5.2

Я пытаюсь скомпилировать рабочую область из 3 проектов с поддержкой C ++ 11. Этот набор проектов успешно скомпилирован и связан с использованием параметров компилятора LLVM по умолчанию. Кроме того, код c ++ ранее был скомпилирован на нескольких компиляторах, включая g ++, llvm, msvc, sun, irix и т. Д., Так что это очень чистый код.

В разделе диалект языка c ++ настроек сборки рабочей области есть 3 позиции:

диалект языка
диалект с ++
стандартная библиотека c ++

Используя настройки:

диалект языка c: компилятор по умолчанию
диалект языка c ++: компилятор по умолчанию
стандартная библиотека c ++: libc ++ (стандартная библиотека LLVM c ++ с поддержкой c ++ 11)

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

(null): «std :: string :: find_last_of (char const *, unsigned long) const», на который ссылаются из:
(null): «std :: string :: size () const», на который ссылаются из:

Казалось очевидным, что я ссылался на неправильную стандартную библиотеку, поэтому я исследовал изменение различных вариантов выше. Изменение диалекта на -std = c ++ 11 даже сломало мою компиляцию. Я не мог найти комбинацию, которая работала бы для меня.

Можете ли вы предложить, что может быть не так?

РЕДАКТИРОВАТЬ: моя мотивация для этого заключается в том, что я хочу использовать std :: thread в моем коде C ++, который взаимодействует с Objective-C (и иметь этот код C ++ по-прежнему переносимым)

1

Решение

XCode 4.5.2 / OSX 10.8.2

Я получаю эти

(null): "std::string::find_last_of(char const*, unsigned long) const",
referenced from: (null):    "std::string::size() const", referenced from:

Различно с разными версиями библиотек openCV. Кажется, проблема в доступе к стандартной библиотеке C ++. В этом случае рабочие настройки были следующими:

Старые версии библиотеки:

C Language Dialect GNU99[-std=gnu99]
C++ Language Dialect GNU++11[-std=gnu++11]
C++ Standard Library libstdc++ (GNU C++ standard library)

последние версии библиотеки:

C Language Dialect GNU99[-std=gnu99]
C++ Language Dialect GNU++11[-std=gnu++11]
C++ Standard Library libc++ (LLVM C++ standard library with C++11 support)

Переключение спецификации стандартной библиотеки на любую из версий приводит к этим ошибкам.

3

Другие решения

Я наконец проследил проблему до двух вещей

1) Несмотря на то, что я установил параметры компилятора на уровне рабочей области, эти параметры не распространялись на составляющие проекты. Что-то, о чем нужно знать! Таким образом, в действительности разные проекты компилировались с разными наборами библиотек компиляторов и диалектов — поэтому неудивительно, что были ошибки ссылок. Сочетание вариантов, которые работали для меня были:

Диалект языка C Компилятор по умолчанию
Диалект C ++ -станд = C ++ 11
Стандартная библиотека C ++ libc ++ (стандартная библиотека LLVM C ++ с поддержкой C ++ 11)

2) При компиляции c ++ 11 один из моих проектов не будет компилироваться. После исправления синтаксической ошибки, он скомпилирован и прекрасно связан с вышеуказанными параметрами

1

При использовании кода 5 у меня была похожая проблема

Undefined symbols for architecture armv7:
"std::string::clear()", referenced from:
FormatLog(unsigned int, int, char const*, std::string&) in libMO.a(AppLog.o)

Мне помогла смена «цели развертывания» с 7.0 до 6.0.

Для XCode 4.5 кажется, придется использовать LLVM C++ with C++11 support вместо компилятора GNU C++ компилятор для стандартной библиотеки C ++.

1
По вопросам рекламы [email protected]