Fil*_*edo 5 c++ qt stl gnu blackberry-10
我正在尝试使用 Momentics IDE 2.0 版创建 BB10 级联项目,并且我需要该项目使用 GNU 标准库而不是 Dinkumware(因为我编译的外部库仅arm-unknown-nto-qnx8.0.0eabi-g++支持 gnu std)。
在 IDE 中,我已将“项目属性”->“C/C++ 构建/设置/运行时”更改为“C++ GNU,但有例外”。但是,当我使用我创建的静态库(.a 文件)运行一个简单的项目(仅包含一个包含构造函数、std::string对象、setter 和 getter(针对对象)以及相应的 cpp 文件的头文件)时,我得到当我这样做时出现分段错误:
testnamespace::testclass *object = new testnamespace::testclass();
std::string test = "Hello";
object->setText(test);
delete object;
Run Code Online (Sandbox Code Playgroud)
我认为出现此错误是因为该库是使用 gnu std 编译的,而该项目是使用 Dinkumware 编译的。
我验证了包含路径,我发现
C:\bbndk\target_10_1_0_428\qnx6\usr\include
Run Code Online (Sandbox Code Playgroud)
包含在之前
C:\bbndk\target_10_1_0_428\qnx6\usr\include\c++\4.6.3
Run Code Online (Sandbox Code Playgroud)
另外,makefile 用于编译项目中的 cpp 文件的命令不是qcc -Vgcc_ntoarmv7le( qcc -V4.6.3,gcc_ntoarmv7le_gppgnu 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
Run Code Online (Sandbox Code Playgroud)
(当然,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;
Run Code Online (Sandbox Code Playgroud)
一切正常,直到代码到达delete temp;我得到输出的位置:
Qml 调试已启用。仅在安全的环境中使用此功能!对象中的字符串:Hello Process 1173778674 (test_bb10) 终止 SIGSEGV code=2 fltno=11 ip=0150ed7c(/usr/lib/ldqnx.so.2@_list_release+0x3c) mapaddr=0002ed7c。参考=78362e2b
有时我得到
Qml 调试已启用。仅在安全的环境中使用此功能!对象中的字符串:Hello free malloc 未分配的对象:../../dlist.c:1096**
我认为问题出在调用new上delete,也许处理器导入的标准库不是正确的。
提前致谢。
| 归档时间: |
|
| 查看次数: |
756 次 |
| 最近记录: |