[英]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 **
我认为问题出在new
和delete
调用中,也许处理器导入的标准库不正确。
提前致谢。
我通过将项目移动到Ubuntu解决了这个问题。 Windows的Momentics不适用于GNU C ++作为运行时。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.