2013-12-13 106 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

很好的答案 –