【发布时间】:2010-04-19 17:05:05
【问题描述】:
我今天一直在尝试使用 NDK 将一些旧的 Symbian C++ 代码转移到 Android。
我几乎没有 C 或 C++ 知识,所以这是一件苦差事,但必须完成。
我的主要问题是我在移植我认为是 Symbian 特定代码以使用 Android NDK 提供的小型 C/C++ 子集时遇到问题。
这是我在使用 cygwin 时遇到的编译错误的图片
我想知道是否有人可以为我指出如何处理这些错误的正确方向?例如 TBool/Int/TUint/RPointerArray/RSocket 是 Symbian 原语,这就是它无法编译的原因还是其他原因?
什么是 ISO C++?
任何教程、指南或提示和帮助将不胜感激。
编辑:
这是我尝试导入的 .h 文件中的代码 sn-p,后面是编译器的 sn-p 输出。
有人可以指导我如何将这个 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
【问题讨论】:
-
是的,这些都是非标准类型。您的代码似乎充满了 Symbian 特定的代码。不确定您的代码是做什么的,是业务逻辑吗?一些算法实现?用户界面?对于 ISO C++,请阅读关于 C++ en.wikipedia.org/wiki/C_plus_plus 的 wiki 文章。
-
请注意,您可以通过单击左侧的小“c:”图标从菜单中选择“编辑 -> 标记”从 Windows 命令提示符窗口复制文本的菜单栏(或通过按 alt-space),用鼠标选择要复制的文本,然后按“enter”复制它。比屏幕截图更容易阅读,然后您可以选择其中的部分内容进行 Google 搜索。
-
嗨 ivan,代码是一个 rtp 流实现,Brooks,感谢您的提示!
-
为那段代码添加了代码 sn-p 和编译器输出
标签: c++ c java-native-interface compiler-errors android-ndk