iOS链接错误,Undefined symbols for architecture arm64:std::__1::basic_string

最近在开发和iOS相关的程序,需要和C++混编,做了几个静态库,之后整个app整合一下,结果在整合过程中遇到问题,总是提示链接错误:

Undefined symbols for architecture arm64:

  "std::__1::basic_string, std::__1::allocator >::__init(unsigned long, char)", referenced from:

      std::__1::wstring_convert, wchar_t, std::__1::allocator, std::__1::allocator >::to_bytes(wchar_t const*, wchar_t const*) in librender_sketcher_x6b64usd.a(sketcher_helper.o)

  "std::__1::basic_string, std::__1::allocator >::resize(unsigned long, wchar_t)", referenced from:

      std::__1::wstring_convert, wchar_t, std::__1::allocator, std::__1::allocator >::from_bytes(char const*, char const*) in librender_sketcher_x6b64usd.a(sketcher_helper.o)

  "std::exception_ptr::~exception_ptr()", referenced from:

      std::__1::packaged_task::operator()() in librender_sketcher_x6b64usd.a(thread_pool_impl-10874E7367B0837E.o)

...

一看是找不到c++相关符号的定义,搞了半天终于有所收获:

可以把app中的任何一个.m文件扩展名改为.mm,即可解决链接错误

亦或 在app的引用库中显示引用 libstdc++.dylib 也可解决此问题


其道理就是只要app中存在.mm文件则app会自动添加对c++库的引用


另外XCODE也有一个问题:我在app中使用NSClassFromString 进行反射时,被反射类在另外一个静态库中,并且该app没有包含该库对应类的头文件,反射后始终返回nil,必须在Build setting的Other link flag中加入-all_load选项才能反射成功


你可能感兴趣的:(其他)