Я привязываю корпоративную библиотеку к своему приложению 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 ++ но это не сработало.
Любая идея?
Здравствуйте, кажется, что вы компилируете, используя компилятор не с ++, вы можете попробовать установить его внутри вашего Варианты проекта iOS или внутри LinkWith attribute
вы должны установить IsCxx = true
на ваше iOS обязательный проект
доступные варианты на Варианты сборки проекта iOS являются
вы должны попробовать либо --compiler:g++
или же --compiler:clang++
Надеюсь это поможет
Alex
Так что, наконец, проблема была решена путем связывания стандартной библиотеки 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 ++ «)]