2010-04-19 42 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