связывание — Как связать стандартную библиотеку C ++ с приложением Monotouch

Я привязываю корпоративную библиотеку к своему приложению Monotouch.
Это был трудный процесс, так как Objective Sharpie не смог создать API, и мне пришлось проявить творческий подход.
Но теперь, когда компиляция, наконец, удалась, я столкнулся с проблемой компоновки

Undefined symbols for architecture armv7:
"std::__1::__basic_string_common<true>::__throw_length_error() const", referenced from:
__ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initIPcEENS_9enable_ifIXsr21__is_forward_iteratorIT_EE5valueEvE4typeES9_S9_ in libWeANDSFLibrary.a(WfStringBody.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::resize(unsigned long, char)", referenced from:
std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int)in libWeANDSFLibrary.a(WfStringBody.o)
std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::str(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)in libWeANDSFLibrary.a(WfStringBody.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::push_back(char)", referenced from:
std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::overflow(int)in libWeANDSFLibrary.a(WfStringBody.o)
"std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_string()", referenced from:
wflang::CWfStringBody::Float64ToArray(double, unsigned short*)in libWeANDSFLibrary.a(WfStringBody.o)
std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream()in libWeANDSFLibrary.a(WfStringBody.o)
std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream()in libWeANDSFLibrary.a(WfStringBody.o)
virtual thunk to std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream()in libWeANDSFLibrary.a(WfStringBody.o)
virtual thunk to std::__1::basic_ostringstream<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_ostringstream()in libWeANDSFLibrary.a(WfStringBody.o)
std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringbuf()in libWeANDSFLibrary.a(WfStringBody.o)
std::__1::basic_stringbuf<char, std::__1::char_traits<char>, std::__1::allocator<char> >::~basic_stringbuf()in libWeANDSFLibrary.a(WfStringBody.o)
...

И т.п.
Я пытался следовать совету в Обтекание библиотеки C ++ в Objective-C не скрывает символы C ++ но это не сработало.
Любая идея?

3

Решение

Здравствуйте, кажется, что вы компилируете, используя компилятор не с ++, вы можете попробовать установить его внутри вашего Варианты проекта iOS или внутри LinkWith attribute вы должны установить IsCxx = true на ваше iOS обязательный проект

доступные варианты на Варианты сборки проекта iOS являются

  • —Компилятор: GCC
  • —составитель: г ++
  • —Компилятор: лязг
  • —Компилятор: лязг ++

вы должны попробовать либо --compiler:g++ или же --compiler:clang++

образ

Надеюсь это поможет

Alex

4

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

Так что, наконец, проблема была решена путем связывания стандартной библиотеки C ++ с использованием

LinkerFlags = «- lsqlite3.0 -lc ++»

Весь мой атрибут LinkWith выглядит так:

[сборка: LinkWith («libMyLibrary.a», LinkTarget = LinkTarget.ArmV6 | LinkTarget.ArmV7 | LinkTarget.Simulator, SmartLink = true, ForceLoad = true, IsCxx = true, Frameworks = «SystemConfiguration CoreLocation CoreTelephony MobileCoreServices» MessageServicesFerviceServices) Сообщение -lsqlite3.0 -lc ++ «)]
2

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