04 2013 档案

clang问题记:libc++和libstdc++
摘要:把代码拿到新买的macbook上编译时,出现莫名其妙的链接错误:Undefined symbols for architecture x86_64: "CppUnit::SourceLine::SourceLine(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)", referenced from: test_codec::test() in test_codec.o 相信也会有不少 阅读全文

posted @ 2013-04-25 21:13 冷欺花 阅读(20038) 评论(0) 推荐(0)

luaL_error与c++ stack unwind的冲突
摘要:一般在用c写的lua函数里,检测到某些参数或前置条件错误时,会用luaL_error来报错,这时脚本层如果是xpcall,其错误处理函数就会被调用,在其中可用debug.traceback()来打印记录错误栈,这是脚本错误调试的常用做法。 但是在c++环境中使用lua时,却有一个细微而致命的bug:lua通常是按c语言方式编译,因此luaL_error最终会调用longjump来实现跨函数远程跳转,而这种跳转不会遵循c++关于stack unwinding的规范,其最直接的影响就是局部变量的析构函数不会被调用。 如果使用的是官方版lua,那么可以用c++方式编译lua来解决。但是如果用... 阅读全文

posted @ 2013-04-13 19:02 冷欺花 阅读(2001) 评论(0) 推荐(0)

导航