我刚刚把一个静态库/框架中的Objective-C类实现文件从.m改成了.mm,然后链接失败并出现以下错误:
Undefined symbols for architecture armv7s: "___gxx_personality_sj0"
我可以通过在应用程序目标的其他链接器标志中添加 -lc++
(libc++.dylib) 来解决此问题。但我的问题是: 为什么会出现这个问题?为什么只有在静态库代码中才会出现,而重命名应用程序的一个实现文件时却不会出现?
除了添加 -lc++
,还有其他解决方案吗?
注意: 此类的实现不包含任何代码。该类也没有使用或导入C++代码,项目中也没有其他地方使用C++代码。
.m
重命名为.mm
时,您将其转换为需要支持异常的代码,并且异常处理需要C++运行时正常工作。 - Anya Shenanigans