黑莓 10:GNU STL

Fil*_*edo 5 c++ qt stl gnu blackberry-10

我正在尝试使用 Momentics IDE 2.0 版创建 BB10 级联项目,并且我需要该项目使用 GNU 标准库而不是 Dinkumware(因为我编译的外部库仅arm-unknown-nto-qnx8.0.0eabi-g++支持 gnu std)。

在 IDE 中,我已将“项目属性”->“C/C++ 构建/设置/运行时”更改为“C++ GNU,但有例外”。但是,当我使用我创建的静态库(.a 文件)运行一个简单的项目(仅包含一个包含构造函数、std::string对象、setter 和 getter(针对对象)以及相应的 cpp 文件的头文件)时,我得到当我这样做时出现分段错误:

testnamespace::testclass *object = new testnamespace::testclass();

std::string test = "Hello";
object->setText(test);

delete object;
Run Code Online (Sandbox Code Playgroud)

我认为出现此错误是因为该库是使用 gnu std 编译的,而该项目是使用 Dinkumware 编译的。

我验证了包含路径,我发现

C:\bbndk\target_10_1_0_428\qnx6\usr\include 
Run Code Online (Sandbox Code Playgroud)

包含在之前

C:\bbndk\target_10_1_0_428\qnx6\usr\include\c++\4.6.3
Run Code Online (Sandbox Code Playgroud)

另外,makefile 用于编译项目中的 cpp 文件的命令不是qcc -Vgcc_ntoarmv7le( qcc -V4.6.3,gcc_ntoarmv7le_gppgnu stl 的支持标志)。

难道我做错了什么?缺少某些配置?

我确实需要在我的 BlackBerry 项目中使用 GNU STD 而不是 Dinkumware,但我不知道该怎么做。

编辑:

我对我的项目进行了一些更改并修复了一些问题。

我将其添加到我的 .pro 文件中

QMAKE_CXX = qcc -V4.6.3,gcc_ntoarmv7le_gpp
QMAKE_CC = qcc -V4.6.3,gcc_ntoarmv7le
QMAKE_LINK = qcc -V4.6.3,gcc_ntoarmv7le_gpp
QMAKE_AS = qcc -V4.6.3,gcc_ntoarmv7le_gpp

LIBS += -lc -lm -lcpp -lstdc++ -Bstatic ../libs/libteste.a -Bdynamic
Run Code Online (Sandbox Code Playgroud)

(当然,LIBS 命令已经存在,但我决定将其放在这里,以便您可以了解我如何链接库)。

现在,我有以下代码:

testenamespace::TesteClass *temp = new testenamespace::TesteClass() ;

std::string teste = "Hello";

temp->setTesteString(teste);

QString qsr = QString::fromStdString(temp->getTesteString());


qDebug ("String in the object: "+qsr.toLatin1());

delete temp;
Run Code Online (Sandbox Code Playgroud)

一切正常,直到代码到达delete temp;我得到输出的位置:

Qml 调试已启用。仅在安全的环境中使用此功能!对象中的字符串:Hello Process 1173778674 (test_bb10) 终止 SIGSEGV code=2 fltno=11 ip=0150ed7c(/usr/lib/ldqnx.so.2@_list_release+0x3c) mapaddr=0002ed7c。参考=78362e2b

有时我得到

Qml 调试已启用。仅在安全的环境中使用此功能!对象中的字符串:Hello free malloc 未分配的对象:../../dlist.c:1096**

我认为问题出在调用newdelete,也许处理器导入的标准库不是正确的。

提前致谢。

Fil*_*edo 2

我通过将项目转移到 Ubuntu 来解决这个问题。Windows 版 Momentics 不能很好地与 GNU C++ 作为运行时配合使用。