黑莓10:GNU STL

5

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

在IDE中,我已经将项目属性->C/C++ Build/设置/运行时更改为“C++ GNU with exceptions”。然而,当我运行一个简单的项目并使用一个由我创建的静态库(.a文件)(只包含一个头文件、一个构造函数、一个std::string对象、一个setter和getter(用于该对象)及其相应的cpp文件),执行以下操作时会出现分段错误:

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

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

delete object;

我认为这个错误的原因是该库使用gnu std编译,而项目使用Dinkumware编译。我核对了包含路径,发现:
C:\bbndk\target_10_1_0_428\qnx6\usr\include 

在之前包含

C:\bbndk\target_10_1_0_428\qnx6\usr\include\c++\4.6.3

此外,makefile中用于编译项目中cpp文件的命令为qcc -Vgcc_ntoarmv7le,而非qcc -V4.6.3,gcc_ntoarmv7le_gpp(支持gnu stl标志)。

我是否做错了什么?是否缺少某些配置?

我真的需要在我的黑莓项目中使用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

当然,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;

一切都运行良好,直到代码执行到delete temp;时,我收到以下输出:

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

有时我也会得到以下输出:

启用了Qml调试。仅在安全环境中使用此功能!对象中的字符串:Hello free malloc object that is not allocated:../../dlist.c:1096**

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

提前感谢您的帮助。

1个回答

2

我通过将项目转移到Ubuntu解决了这个问题。Momentics for Windows与GNU C++作为运行时不兼容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接