繁体   English   中英

BlackBerry 10:GNU STL

[英]BlackBerry 10: GNU STL

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

在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 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的支持标志)。

难道我做错了什么? 有些配置丢失了吗?

我真的需要在我的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命令当然已经存在,但我决定把它放在这里,这样你就可以理解我是如何链接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 Process 1173778674(test_bb10)终止SIGSEGV代码= 2 fltno = 11 ip = 0150ed7c(/usr/lib/ldqnx.so.2@_list_release+0x3c)mapaddr = 0002ed7c。 REF = 78362e2b

有时候我会

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

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

提前致谢。

我通过将项目移动到Ubuntu解决了这个问题。 Windows的Momentics不适用于GNU C ++作为运行时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM