最近在开发和iOS相关的程序,需要和C++混编,做了几个静态库,之后整个app整合一下,结果在整合过程中遇到问题,总是提示链接错误:
Undefined symbols for architecture arm64:
"std::__1::basic_string
std::__1::wstring_convert
"std::__1::basic_string
std::__1::wstring_convert
"std::exception_ptr::~exception_ptr()", referenced from:
std::__1::packaged_task
...
一看是找不到c++相关符号的定义,搞了半天终于有所收获:
可以把app中的任何一个.m文件扩展名改为.mm,即可解决链接错误
亦或 在app的引用库中显示引用 libstdc++.dylib 也可解决此问题
其道理就是只要app中存在.mm文件则app会自动添加对c++库的引用
另外XCODE也有一个问题:我在app中使用NSClassFromString 进行反射时,被反射类在另外一个静态库中,并且该app没有包含该库对应类的头文件,反射后始终返回nil,必须在Build setting的Other link flag中加入-all_load选项才能反射成功