2013-12-13 99 views
4

我想创建一个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 **

我认为问题是newdelete调用,也许处理器的进口标准库是不正确的。

在此先感谢。

回答

2

我通过将我的项目移动到Ubuntu来解决此问题。 Momentics for Windows在GNU C++作为运行时不能很好地工作。

+2

很好的答案 –