我想创建一个BB10级联项目与Momentics IDE版本2.0,我需要该项目使用GNU标准库而不是Dinkumware(因为我有外部库编译arm-unknown-nto-qnx8.0.0eabi-g++
只支持GNU标准)。黑莓10:GNU STL
在IDE中,我将Project Properties-> C/C++ Build/Settings/Runtime更改为“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编译性病和项目与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的支持标志)。
我做错了什么?某些配置丢失了?
我真的需要在我的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
(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代码= 2 fltno = 11 ip = 0150ed7c(/usr/lib/[email protected]_list_release+0x3c)mapaddr = 0002ed7c。 REF = 78362e2b
,有时我得到
调试设为Qml启用。只能在安全的环境中使用!对象中的字符串:Hello分配的空闲malloc对象不是 :../../ dlist。C:1096 **
我认为问题是new
和delete
调用,也许处理器的进口标准库是不正确的。
在此先感谢。
很好的答案 –