2010-04-19 65 views
0

我一直在嘗試使用NDK將一些舊的Symbian C++代碼移植到Android上。C/C++新手使用Android NDK移植遺留代碼,得到編譯錯誤

我幾乎沒有C或C++的知識,所以它是一件苦差事,但必須完成。

我的主要問題是,我無法移植我認爲是使用Android NDK提供的小型C/C++子集的Symbian專用代碼。

下面是我用的cygwin

我想知道如果任何人都可以就如何處理這些錯誤指向正確的方向我得到的編譯錯誤的照片嗎?例如TBool/Int/TUint/RPointerArray/RSocket是一個Symbian原語,這就是爲什麼它不會編譯或者是其他的東西?

什麼是ISO C++?

任何教程,指南或技巧和幫助將不勝感激。

編輯:

這裏是.h文件,我試圖導入,然後輸出從編譯器代碼段的代碼片段。

有人能指導我如何將這個Symbian特定的代碼移植到正常的C++嗎?

如果我得到的最新的Symbian具體怎麼改,我相信我可以改變,然後開始端口,其餘自己


#ifndef __RTPSTREAM_H__ 
#define __RTPSTREAM_H__ 


class CRTPParser; 

class MDataRecorderObserver 
{ 
public: 
virtual void DataRecorded(const TDesC8& aData, TUint aCodec, TUint aFramesizeMs)=0; 

}; 

class MRTPStreamDataObserver 
{ 
public: 
virtual void AudioDataSent()=0; 
virtual void DataReceived(const TDesC8& aData,TUint aCodec, TBool aMarker, TUint aSeq, TUint aTime)=0; 
virtual void DataReceived(const TDesC8& aData)=0; 
}; 

$ make APP=ndk-socket 
Android NDK: Building for application 'ndk-socket' 
Compile++ thumb: socket <= apps/ndk-socket/project/jni/rtpstream.cpp 
In file included from apps/ndk-socket/project/jni/com_ciceronetworks_utils_RTPJn 
i.h:2, 
      from apps/ndk-socket/project/jni/rtpstream.cpp:4: 
build/platforms/android-3/arch-arm/usr/include/jni.h:489: note: the mangling of 
'va_list' has changed in GCC 4.4 
In file included from apps/ndk-socket/project/jni/rtpstream.cpp:11: 
apps/ndk-socket/project/jni/rtp/RTPStream.h:15: error: ISO C++ forbids declarati 
on of 'TDesC8' with no type 
apps/ndk-socket/project/jni/rtp/RTPStream.h:15: error: expected ',' or '...' bef 
ore '&' token 
apps/ndk-socket/project/jni/rtp/RTPStream.h:23: error: ISO C++ forbids declarati 
on of 'TDesC8' with no type 
apps/ndk-socket/project/jni/rtp/RTPStream.h:23: error: expected ',' or '...' bef 
ore '&' token 
apps/ndk-socket/project/jni/rtp/RTPStream.h:24: error: ISO C++ forbids declarati 
on of 'TDesC8' with no type 
apps/ndk-socket/project/jni/rtp/RTPStream.h:24: error: expected ',' or '...' bef 
ore '&' token 
apps/ndk-socket/project/jni/rtp/RTPStream.h:24: error: 'virtual void MRTPStreamD 
ataObserver::DataReceived(int)' cannot be overloaded 
apps/ndk-socket/project/jni/rtp/RTPStream.h:23: error: with 'virtual void MRTPSt 
reamDataObserver::DataReceived(int)' 
apps/ndk-socket/project/jni/rtp/RTPStream.h:30: error: 'TInt' has not been deca 
red 
+1

是的,這些都是非標準類型..你的代碼似乎充滿了Symbian特定的代碼。不確定你的代碼是做什麼的,它是商業邏輯嗎?一些算法的實現?用戶界面?對於ISO C++,請閱讀C++ http://en.wikipedia上的wiki文章。組織/維基/ C_plus_plus。 – Ivan 2010-04-19 17:11:34

+1

需要注意的是,您可以通過點擊菜單欄左端小小的「c:」圖標,從菜單欄中選擇「編輯 - >標記」來複制Windows命令提示窗口中的文本點擊alt-space),選擇你想用鼠標複製的文本,然後點擊「enter」複製它。比screencap更容易閱讀,然後您可以選擇它的一些位置進行Google搜索。 – 2010-04-20 04:13:36

+0

嗨伊萬,代碼是一個rtp流的實現,布魯克斯,謝謝你的提示! – 2010-04-20 08:09:19

回答

1

通過「ISO C的想法++ 「,G ++編譯器意味着」C++標準「。

這看起來像通常的G ++錯誤當它變得困惑時發生。通常只有最重要的錯誤信息纔是有意義的,然後剩下的就是編譯器打印出來的東西,因爲它很混亂。奇怪的是,「<」令牌「之前的預期類名稱的初始錯誤本身比實際錯誤更爲典型。看看代碼中的這一點,看看它是什麼意思,以及在那裏是否有任何奇怪或特定於編譯器,這可能是有用的。

此外,從谷歌搜索,它看起來像關於va_name mangling的初始注意事項只是提供信息,在這種情況下不太可能導致問題 - 具體而言,肯定不會導致其餘的這些編譯器錯誤。

編輯:根據您發佈的修正差錯輸出和源代碼,它看起來像錯誤僅僅是這個代碼使用的是「TDesc8」數據類型,沒有它首先聲明,剩下的可能隨之而來。根據我可以在網上找到的信息in the Symbian documentation,使用該類型的代碼應該包含#include <e32des8.h>行以包含相關頭文件。您正在編譯的代碼是否包含該頭文件?

+0

添加代碼片段和編譯器輸出感謝Brooks,我谷歌搜索了va_name mangling警告我自己,也得出了這個結論,對不起,我應該在我最初的問題中發佈了這個。我已經添加了一段代碼和試圖編譯的輸出,以查看是否有人可以更好地理解這個問題 – 2010-04-20 09:05:45

+1

Donal:我在我的評論中添加了一個編輯來處理新信息;希望能幫助到你! – 2010-04-21 06:01:03

+0

感謝Brooks,它似乎是這樣的,我的代碼沒有包含該頭,因爲它不是Android NDK中的構建環境的一部分,所以這意味着Symbian代碼將需要通過外觀的完整重寫 – 2010-04-21 08:13:49