新视网站建设联系qq,微信如何自己开发小程序,安装vs2015网站开发,wordpress 注册设置问题描述
当我修改了几行代码#xff0c;build了新的lib并集成到app以后#xff0c;app 在mac11 的OS上运行良好#xff0c;但是在 mac11 以及更多版本上#xff0c;app持续crash#xff0c;launch不起来。 使用terminal 打开app的时候#xff0c;输出如下错误#xff…问题描述
当我修改了几行代码build了新的lib并集成到app以后app 在mac11 的OS上运行良好但是在 mac11 以及更多版本上app持续crashlaunch不起来。 使用terminal 打开app的时候输出如下错误
dyld: Symbol not found: __ZNSt3__113basic_filebufIcNS_11char_traitsIcEEEC1EvReferenced from: /Applications/**/**.nodeExpected in: /usr/lib/libc.1.dylib问题定位过程
遇到问题先googlegoogle提供的建议基本都是升级macos这个对我不适用。排查可用版本与当前版本的变量只有编译的macos和xcode升级了。基本可以确定是升级导致的。但仍然需要定位清楚为什么macos和xcode会导致在就的macos 上crash。利用objdump工具查看lib的符号表结果如下 同样的demo在旧的sdk(MacOSX12.1.sdk) 和新的sdk(MacOSX13.1.sdk)下生成的符号表不同。 源码
#include iostream
#include fstreamint main(int, char**){printf(hello);// std::cout Hello, from symbolTest!\n;std::ifstream fs(test.txt);std::filebuf fb;fb.open(test.txt, std::ios_base::in);std::cout std::boolalpha direct call: fb.is_open() \n through streambuf: fs.rdbuf()-is_open() \n through fstream: fs.is_open() \n;}MacOSX13.1.sdk 编译出来的符号表
objdump -t symbolTest | grep __ZNSt3__113basic_filebufIcNS_11
0000000000000000 *UND* __ZNSt3__113basic_filebufIcNS_11char_traitsIcEEE4openEPKcj
0000000000000000 *UND* __ZNSt3__113basic_filebufIcNS_11char_traitsIcEEEC1Ev
0000000000000000 *UND* __ZNSt3__113basic_filebufIcNS_11char_traitsIcEEED1EvMacOSX12.1.sdk 编译出来的符号表
objdump -t symbleTest | grep ZNSt3113basic_filebufIcNS_11char_traitsIcEEEC1Ev
0000000100003280 w F TEXT,text ZNSt3113basic_filebufIcNS_11char_traitsIcEEEC1Ev
0000000100003280 d UND ZNSt3113basic_filebufIcNS_11char_traitsIcEEEC1Ev不同的MacOSX sdk完全相同的编译选项编出来的可执行文件里面的符号却不同。
问题定位到这里第一想法是把MacOSX 降级到原来的版本但这是个大动作。从理论上讲高版本的MacOSX 应该能兼容到MAC11。查找其他在MacOSX13.1.sdk 编译出来的有符号的库对比flags.make中的编译选项发现编译选项少了一个-mmacosx-version-min10.13 , 在cmake中加上这个编译选项后再查找符号符号就存在了。
解决方案
cmake中添加最小支持版本的编译选项
set(CMAKE_C_FLAGS ${CMAKE_C_FLAGS} -mmacosx-version-min11.0)
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -mmacosx-version-min11.0)