我想創建一個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
調用,也許處理器的進口標準庫是不正確的。
在此先感謝。
很好的答案 –