`

【翻译】(20)System Issues

 
阅读更多

-----------------

 

英文文档见android-ndk-r6b的documentation.html

属于Android Native Development Kit (NDK)的一部分

http://developer.android.com/sdk/ndk/index.html

翻译仅个人见解

-----------------

 

Android System Image Issues

 

Android系统镜像问题

===========================

 

This document contains a list of known issues in existing Android system images that NDK developers should be aware of.

 

这个文档包含NDK开发者应该意识到的,现存Android系统镜像的已知问题的列表。

 

I. Android 1.5 System Issues:

 

一、Android 1.5系统问题:

-----------------------------

 

The following issues correspond to the official Android 1.5 system images:

 

以下问题对应官方Android 1.5系统镜像:

 

No standard C++ library support:

 

缺乏对标准C++库支持:

--------------------------------

 

The Android 1.5 system does not use any C++ standard library, and does not provide one to applicative native code. Instead, a very limited set of headers are provided (see docs/STABLE-APIS.html) which correspond to the C++ support code used to build the Android platform.

 

Android 1.5系统没有使用任何C++标准库,也没有提供一种C++标准库给应用原生代码。取而代之的是提供一个非常有限的头文件集合(见docs/STABLE-APIS.html),它们对应用于构建Android平台的C++支持代码。

 

It is possible to hack existing C++ STL implementations to work on top of this, but this is not supported yet. We recommend trying with uSTL and STLport at this point if you really need this.

 

可以修改现存的C++ STL(注:C++标准模板库)实现,使其在这个平台上可用,但现在已经不支持了(注:这里可能是指,官方建议你别这样做,可能有问题)。我们强烈建议现在如果你真的需要它,尝试使用uSTL和STLport。

 

No support for C++ exceptions and RTTI:

 

缺乏对C++异常和RTTI(注:运行时类型信息,或作运行时类型标识)的支持。

---------------------------------------

 

The Android 1.5 system image lacks several features necessary to reliably implement C++ exceptions and RTTI. C++ code that depends on these features will simply not link or run appropriately on Android 1.5

 

Android 1.5系统镜像缺乏几个可靠地实现C++异常和RTTI所必需的特性。依赖于这些特性的C++代码将简单地链接或适当地运行于Android 1.5。

 

C Library limitations:

 

C库限制:

----------------------

 

The C library doesn't try to implement every feature under the sun. Most notably, pthread cancellation is not supported. A detailed overview of the C library and its design is available in docs/system/libc/OVERVIEW.html

 

C库不会尝试实现众所周知的所有特性(注:Android底层用的是C库是bionic而非glibc)。最值得留意的是,不支持pthread的线程取消(注:这里指pthread_cancel?)。C库的详细概述及其设计在docs/system/libc/OVERVIEW.html可用。

 

No SysV IPCs in C library:

 

在C库中缺乏SysV IPC(注:SysV是指系统五,早期Unix系统中与BSD并称的流派,IPC则是进程间通信的简称):

--------------------------

 

Unix System V Inter-Process Communication APIs (e.g. semget()) are intentionally not available from the C library, to avoid denial-of-service issues. See docs/system/libc/SYSV-IPC.html for details.

 

Unix系统五进程间通信API(例如semget())(注:获取信号量)在C库中是故意不可用的,以避免拒绝服务问题(注:简称DoS,一种通过不断地占用资源而干扰目标系统的正常运行的攻击方法,一般是指网络攻击,这里引申了)。详细请参考docs/system/libc/SYSV-IPC.html。

 

C Library bug: getservbyname() returns port number in incorrect order:

 

C库缺陷:getservbyname()以错误的顺序返回端口号:

----------------------------------------------------------------------

 

The Android 1.5 C library function getservbyname() returns the port number corresponding to a given network service in incorrect order. The function stores its result in a 'struct servent' structure, and the port number in its 's_port' field.

 

Android 1.5 C库函数getservbyname()以错误的顺序返回对应所给网络服务的端口号码。这个函数保存结果在struct servent结构体中,端口号在它的s_port域。

 

The standard mandates that this value is stored in network order (and thus should be converted to host order through ntohs()). However, the 1.5 implementation is buggy and returns the number.

 

标准要求是这个值应该按网络顺序保存(并且这样就应该能通过ntohs()函数转换为主机顺序)(注:ntohs将一个无符号短整形数从网络字节顺序转换为主机字节顺序,是network to host short的缩写)。然而1.5的实现有缺陷,返回不正确的数。

 

This bug is fixed in later releases of the platform, and applications should not depend on the wrong behaviour in the future. Avoid using this function if possible; if this is not possible, try to use a small wrapper like the following one:

 

这个bug在后来的平台发布版中修正,而应用程序不应该在未来依赖于这个错误行为。尽可能避免使用这个函数;如果可以,尝试使用小的封装,如下所示:

 

static struct servent*

my_getservbyname(const char*  name, const char*  proto)

{

    static int       has_bug = -1;

    struct servent*  ret;

 

    if (has_bug < 0) {

        ret = getservbyname("http",NULL);

        has_bug = (ret == NULL || ret->s_port == 80);

    }

 

    ret = getservbyname(name, proto);

    if (has_bug)

        ret->s_port = htons(ret->s_port);

}

 

(the returned struct servent is thread-local and can be modified by the caller. It will be over-written on the next call to the function though).

 

(返回的servent结构体是线程局部的,可以被调用者修改。虽然它会被下一次函数调用覆写)。

 

Dynamic Linker limitations:

 

动态链接器限制:

---------------------------

 

The Android dynamic linker in 1.5 has many important limitations:

 

1.5版的Android的动态链接器有许多重要限制:(注:Android的链接器是/system/bin/linker,而非Linux的ld)

 

- No support for LD_LIBRARY_PATH, LD_PRELOAD, RTLD_LOCAL and many other options.

 

- 不支持LD_LIBRARY_PATH、LD_PRELOAD、RTLD_LOCAL和许多其它选项。

 

- Static C++ constructors in executables are called twice due to a bug in the C library initialization sequence. However, static C++ constructors in shared libraries are only called once.

 

- 可执行文件的静态C++构造函数(注:这里应该指静态域变量的构造函数)会被调用两次,因为C库初始化顺序有缺陷。然而动态库的静态C++构造函数只会调用一次。

 

- Static destructors are never called at the moment, either at program exit, or when dlclose() is called.

 

- 静态析构函数(注:这里应该指静态域变量的析构函数),不管在程序退出还是调用dlclose(),都不会立刻执行。(注:dlclose用于关闭动态库)

 

- dlerror() reporting is very limited and only provides a few generic error messages that make it difficult to know why a dynamic load/link operation failed. Most of the time, the culprit is a missing symbol.

 

- dlerror()的报告非常有限,并且只提供很少常规的错误信息,让人难以得知动态加载或链接操作失败的原因。大部分情况下,出错原因是个缺失的符号。

 

- A bug prevents one application shared library from depending on another one. For example, if you build both libfoo.so and libbar.so for your application, and list libfoo.so as a dependency for libbar.so in bar/Android.mk (with LOCAL_SHARED_LIBRARIES := foo), then loading libbar.so will always fail, even if you have already loaded libfoo.so in your process.

 

- 有一个缺陷阻止应用程序动态库依赖于其它动态库。例如,如果你为应用程序构建libfoo.so和libbar.so,在bar/Android.mk文件中把libfoo.so列为libbar.so的依赖。(用LOCAL_SHARED_LIBRARIES := foo)那么加载libbar.so将总是失败,即便你已经在你的进程中加载了libfoo.so。

 

分享到:
评论

相关推荐

    外文翻译 stus MVC

    Even if you never implement a system with Struts, you may get some ideas for your future servlets and JSP page implementation. Introduction Kids in grade school put ...

    超牛逼的自然语言处理论文和代码

    The Research and System Implementation of Automatic Acquisition of Large-scale Bilingual Parallel Corpus from Web_yeshanni_master thesis 2008.pdf Research on Fault-tolerant Statistical Machine ...

    RFC975_自治联邦 .doc

    版权:本翻译文档可以用于非商业用途自由转载,但必须保留本文档的翻译及组织信息。 Network Working Group D. L. Mills Request for Comments: 975 M/A-COM Linkabit February 1986 自治联邦 (Autonomous ...

    顾家北100句翻译简版.doc

    Addressing these issues requires a comprehensive approach, considering the interconnectedness of different sectors and the impact on all members of society. By doing so, we can strive for a more ...

    计算机类翻译案例中英对照.doc

    3. **个体分析模型(Specific-Issues-Oriented Analysis)**:这是对审计重点的深入分析,通过不同角度的分析来核查问题,筛选线索,为后续的延伸取证提供明确目标。 ### 数据分析技术 #### 查询分析技术(Analysis ...

    自动化专业英语教程(王宏文)第二版全文翻译

    ### 自动化专业英语教程(王宏文)第二版全文翻译知识点概览 #### PART1:电气与电子工程基础 **UNIT1:电气网络** - **AElectrical Networks(电气网络)** - 关键概念:电路理论、基尔霍夫定律、电阻、电容、...

    exam-system-frontend

    翻译招聘 :loudspeaker: 我们需要您的帮助: https : //github.com/ant-design/ant-design-pro/issues/120 特征 :gem_stone: 整洁的设计:遵循蚂蚁设计规范 :triangular_ruler: 通用模板:企业应用程序的典型...

    Practical Recommender Systems

    Learn to build a recommender system the right way: it can make or break your application! Practical Recommender Systems explains how recommender systems work and shows how to create and apply them ...

    英语四级语法

    Not only has the highway system affected the American economy by providing shipping routes, it has led to the growth of spin-off industries like service stations, motels, restaurants, and shopping ...

Global site tag (gtag.js) - Google Analytics