我正在编写一个跨平台的代码,它应该在linux,windows,Mac OS上编译.在窗户上,我必须支持视觉工作室和mingw.
有一些特定于平台的代码,我应该放在#ifdef .. #endif环境中.例如,这里我放置了win32特定代码:
#ifdef WIN32
#include <windows.h>
#endif
Run Code Online (Sandbox Code Playgroud)
但是我如何识别linux和mac OS?我应该使用什么定义名称(或等)?
我正在使用backtrace打印应用程序的堆栈跟踪,我得到类似的东西
libQtCore.so.4(_ZN11QMetaObject8activateEP7QObjectPKS_iPPv+0x843) [0x7f889d20cf33]
libQtGui.so.4(_ZN7QAction9triggeredEb+0x32) [0x7f889d76c2f2]
libQtGui.so.4(_ZN7QAction8activateENS_11ActionEventE+0xb0) [0x7f889d76d670]
libQtGui.so.4(+0x6242f4) [0x7f889db862f4]
Run Code Online (Sandbox Code Playgroud)
有没有办法将"链接器名称"转换为"源名称"并从偏移量中获取代码行号?
我想要回溯,看起来像这样:
libQtCore.so.4 (QMetaObject::activate(QObject):1022)
libQtGui.so.4 (QAction::triggered()::47)
Run Code Online (Sandbox Code Playgroud)
UPD.
据我所知,由于编译器的细节,这种技术可能起作用或不起作用或工作不好.我想至少在gcc和visual c ++中"demangle"链接符号.
当我调用此代码时:
QScriptEngine e;
e.evaluate("print('hello, world!')");
Run Code Online (Sandbox Code Playgroud)
输出文本(来自print方法)写入主应用程序的终端.
有没有办法将其重定向到自定义QIODevice?