导航:首页 > 源码编译 > icu编译问题

icu编译问题

发布时间:2024-04-17 22:23:48

❶ 27岁386斤程序员三进ICU,程序员是不是都很辛苦

程序员确实是一项比较苦的职业,经常性的加班,长时间对着电脑易疲劳,还有工作上的压力。

一位二十多岁的程序员,体重达到了三百多斤,因为糖尿病几次住进ICU。这位程序员三次住进ICU,主要是因为他体重过重,身患糖尿病,这名程序员家里条件较好,又是家中独子,父母比较溺爱,在上大学的时候,体重就已经达到了三百多斤,然后以每年十斤的速度在递增。他几次住进ICU,可能跟他程序员的工作并没有多大关系,但是程序员确实是一项很辛苦的工作。因为工作的性质需要不定时的加班;长时间对着电脑让身体感到很劳累;同时如果遇到解决不了的问题,也会造成很大的精神压力。

三、程序号确实辛苦,长时间对着电脑,缺少运动。

程序员这个职业使用的主要工具就是电脑,长时间对着电脑,让眼睛跟身体都很容易感到疲劳,同时因为长时间坐着,身体缺少运动,也很容易产生肥胖等各种各样的疾病。

❷ 如何在VS2015中集成QT5.5

1. 首先,我们下载源码包,加压源码包到磁盘。
2. 由于编译QtWekbit需要ICU andANGLE 库,ICU库需要单独下载和编译,下载ICU4Cversion 56.1并解压到磁盘,目录位置参见随后说明。
3. 在Qt 5.5.1的源码包中还存在一个BUG,如果直接编译的话在编译QT3D模块的时候会报没有找到Zlib.h的错误而中断编译,所以参照如下提示修改qt-everywhere-opensource-src-5.5.1\qt3d\src\3rdparty\assimp目录下的assimp.pri文件。可参考地址codereview.qt-project.org/...mp.pri。

4. 在编译QT5.5.1之前还需要安装配置一下的工具和环境:
5. 经过上面的步骤可以开始进行编译ICU4C version 56.1和QT5.5.1的源码了
6. 如果以上的配置都正确的话开机让机器编译几个小时后就可以在目标路径下生成QT5.5.1的运行文件。

❸ 用MATLAB和C++2008混合编程,出现MATLAB:I18n:MissingICUData - ICU data not found

你这个错误据说是常见发生在安装过多个版本的matlab的系统上的,你最好用一个纯净系统来弄。还有一个可能就是32位和64位的问题。
只是很奇怪,如果你追求时间空间效率,就纯用C++,C++很多计算的库。要是只是需要调度或者粘合matlab脚本,用脚本语言多好,何苦用C++?

❹ ICU(International Component for Unicode)有什么作用

International Component for Unicode (以下简称 ICU)
是一套稳定成熟、功能强大、轻便易用和跨平台支持Unicode 的开发包,使得开发人员在 C/C++ 和 Java
上开发全球化软件产品更容易,ICU 是由 IBM 发布和维护,并且是开放源代码的。
ICU
可以根据客户端的语言环境给客户返回最接近语言的字符串,也就是说客户端可能与服务器端的语言环境不一致,不能只根据服务器端的语言来返回字符串。而且将
来单独增加或维护资源文件,不需要重新生成可执行文件或动态链接库。为了提高重用性,最好将所有资源信息统一管理,不是每个模块各自维护管理。如下图1所
示:

http://www.ibm.com/developerworks/cn/opensource/os-mfc2icu/index.html

而 Microsoft Foundation Class(以下简称
MFC)是资源和程序模块合在一起的,即每个模块下都有多个资源文件路径,如 neutral、en-US、ja-JP 和 zh-CN
等,它们分别代表与语言无关不需要翻译的、英文、日文和简体中文等资源信息,每个资源路径下都有个扩展名是 .RC
的文件,里边存放的是相应语言每个标识(ID)对应的字符串。每次编译都是将所有的语言字符串和源代码一起生成看执行文件或动态链接库。当运行时只能根据
所在系统的语言环境返回相应的字符串。如下图2所示:
图2:MFC 资源管理框架示意图

由此可见,ICU 更灵活,可以支持不同语言之间的交流,而且维护更容易,再增加额外的语言也方便,几乎不用修改源代码,并且 ICU 是跨平台的,不仅仅可以用在 Windows 上,也可以用在 linux、AIX、Solaris 和 HP-UX 等系统上。
要用 ICU 资源架构升级已有 MFC 资源架构,主要考虑两个方面:一是要提取各个模块下所有的字符串信息到 ICU
的资源文件;再就是要更新源程序中调用资源的接口(API),在 MFC 资源管理架构中,用的是的 LoadString
函数去读取相应语言的字符串,我们可以用 ICU4C 的 getStringEx 或 getStringByKey 函数替代
LoadString。
对不同的语言环境(Locale),ICU 可根据不同的 Locale 参数自动使用最恰当的资源包(Resource Bundle)。
ICU 还支持回退(Fallback)机制,尽可能返回用户最接近的语言,例如在简体中文环境下,按优先级依次查找
gb18030.res、_gb18030.res、zh_Hans_CN.res、_zhHans_CN.res、zh_Hans.res、
_zhHans.res、zh.res、root.res 和 _root.res 资源包文件,root 是根资源,一般就将英文资源作为根资源。
回页首
2 用 ICU 实现对 MFC 资源架构的升级
2.1 对原有 MFC 资源架构中资源信息的提取
MFC 资源模块有特定格式的资源文件,例如有个模块 zh-CN 目录下 rational.rc 文件内容如下:
//Microsoft Developer Studio generated resource script.
//
#include "..\resource.h"

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32

/////////////////////////////////////////////////////////////////////////////
//
// String Table
//

STRINGTABLE DISCARDABLE
BEGIN
IDS_EXCEPTION "发生异常。\n"
IDS_ERR_FAILURE "登录失败:"%_ARG_%"\n"
END

该资源对应的语言可以根据目录获得,ICU 只需要 STRINGTABLE 部分就可,即所有以 STRINGTABLE DISCARDABLE BEGIN开始,以 END 结束部分是我们需要提取的,每个标识(ID)的值在 ..\resource.h 中已定义,如:
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by rational.rc
//
#define IDS_ EXCEPTION 18001
#define IDS_ERR_FAILURE 18002

可以开发出一个自动脚本去提取所有模块下的标识(ID)和字符串到一个以 UTF-8 编码的 ICU 格式的资源文件,例如简体中文资源结果如下:
zh:table {
// String resources from rational/resource.h

// Message id range: 18001 18002

// IDS_EXCEPTION
18001:string { "发生异常。\n" }

// IDS_ERR_FAILURE
18002:string { "登录失败:"%_ARG_%"\n" }
}

还要考虑到 ICU 的回退(Fallback)机制,将英文的定义为根(root)资源比较好,这样英文的 ICU 资源文件就以 root:table { 开头。
再用 ICU 的资源生成工具 genrb 将不同语言提取出来的文本文件转换成 ICU 可读的二进制资源文件,如:
genrb -e utf-8 -p rational -k rational_zh.txt
这样做成功之后,这些提取出来的资源就可以被 ICU 接口函数调用了。每种语言对应一个资源包,将来要想维护或增加新的语言包,就用类似的方法,不需要重编译核心模块代码了。
2.2 从 MFC资源架构到 ICU 资源架构接口的转换
有了上面提取出来的 ICU 资源包之后,接下来就是让源程序中使用 MFC LoadString 函数的都用 ICU
资源读取函数了,可能会有很多处 LoadString,可以用 C++ 宏(Macro)编译预处理这个简便的方法,来达到替换所有的
LoadString。然后我们可以开发出新的利用 ICU 获得资源的函数 ICULoadString(int uID, CString
value) 如下:
#include "unicode/ures.h"

BOOL ICULoadString(int uID, CString value)
{
UErrorCode err = U_ZERO_ERROR;
int32_t len;
char uID[8];

// ICU 根据客户端的语言环境打开相应的资源包
UResourceBundle *urb = ures_open(getResPath(), getUserDesiredLocale(), &err);
if (U_FAILURE(err)) {
return FALSE;
}

// 用 ICU 函数获取该标识对应客户端语言环境的字符串
sprintf(uID, "%d", ID); // Convert the integer ID to a decimal string
value = CString(ures_getStringByKey(urb, uID, &len, &err));
if (U_FAILURE(err) || value.IsEmpty()) {
ures_close(urb);
return FALSE;
}

ures_close(urb);

return TRUE;
}

Locale 参数可以在客户端刚连接或会话初始化(Session
initialization)时,就得到客户端的语言环境信息,程序中就可随时通过getUserDesiredLocale()
函数获取该信息,这样就实现了 ICU 根据客户端语言环境返回客户最想得到的语言信息。
回页首
3 总结
使用 ICU
库可以简化我们的工作,更好的满足了我们的全球化产品需求,而且可靠稳定,也利于将来维护和升级。想要增加更多的语言,不需要为此重新编译可执行文件或动
态链接库,只要有相应语言的 ICU资源包即可,而且会使产品的层次化和模块化更好,减小了可执行文件或动态链接库的大小,性能也会更强。
回页首
提示
1). 注意 ICU 在对简体中文和繁体中文使用回退机制的时候都有可能会在使用 root 资源之前会合都去查找 zh 资源,注意避免不恰当的读取。
2). 在 ICU 3.4 以后的版本推荐使用包(Package)代替文件或路径名构造或打开资源包,即先用 genrb 命令编译文本文件到
ICU 资源文件,然后使用 pkgdata 命令再将 ICU 资源文件转成包数据文件,这样在打开资源包之前先使用 udata_setAppData 或 udata_open 装入包数据即可。ICU 自带的示例 ufortune 是一个利用资源包的好样例。

android 怎么使用icu

如果只是测试修改后效果,执行步骤A即可;如果需要build后生效,则需要执行全部步骤
A. 在临时目录中编译ICU资源
1. 在external/icu4c下新建临时目录icubuild,进入icubuild目录
$mkdir external/icu4c/icuBuild
$cd external/icu4c/icuBuild
2. 执行icuConfigureRun Linux命令,生成make文件
$.././runConfigureICU Linux
3. 执行make -j2命令,
$make -j2
对于GB版本,如果make -j2出错,需要用mtk提供的文件(Android 2.3 make-j2 ERROE.rar)替换(需要备份原文件)。
4. 将生成的external/icu4c/icuBuild/data/out/tmp/icudt44l.dat push到手机测试
$adb remount
$adb push external/icu4c/icuBuild/data/out/tmp/icudt44l.dat system/usr/icu/
$adb reboot
ICS对应的是icudt46l.dat,
JB以及以后版本是icudt48l.dat
B. COPY所需文件
1、将第一步生成的externalicu4cicubuilddataout mpicudt44l.dat复制到externalicu4cstubdata下并改名为icudt44l-all.dat,覆盖原来的同名文件。
2、对于GB版本,从ICS工程上拷贝路径prebuildlinux-x86icu-4.4文件夹,放到相应的路径下
ICS版本是icudt46l.dat和icudt46l-all.dat
JB及以上是icudt48l.dat和icudt48l-all.dat
C. 配置环境变量
重新配置环境变量(如果不配置正确会导致执行脚本出错)。以我的系统为例,配置过程如下:
1. 在终端中进入/proj/mtk71491/Desktop/GB/alps目录即:
$cd /proj/mtk71491/Desktop/GB/alps
2. 然后执行脚本(等价于./ build/envsetup.sh):
$source build/envsetup.sh
3. 配置环境变量(注意“=”前后不要有空格)。
$export ANDROID_EABI_TOOLCHAIN=/proj/mtk71491/Desktop/GB/alps/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/(JB2以及以上不执行此步骤)
$export LD_LIBRARY_PATH=/proj/mtk71491/Desktop/GB/alps/prebuilt/linux-x86/icu-4.4/(JB以及上以跳过这一步)
$export ANDROID_BUILD_TOP=/proj/mtk71491/Desktop/GB/alps/
执行完没有任何提示说明配置成功。
D. 执行脚本,重新生成.dat文件
执行脚本,如果遇到文档印尼语错误请用MTK提供的脚本(icu_dat_generator.rar)替换后再执行,如下所示:
1. 进入/proj/mtk71491/Desktop/GB/alps/external/icu4c/studdata目录
$cd external/icu4c/studdata
2. 执行脚本
$./icu_dat_generator.py 4.4 (ICS及以后版本执行$./icu_dat_generator.py)
如果该脚本执行成功,则会更新一遍stubdata下的icudt44l-**.dat这些文件,如果看到这些文件的修改时间变成了最新的时间,就说明已经重新生成真正最后起 作用的是icudt44l-large.dat这个文件。
ICS版是icudt46l-default.dat
JB以及以上是icudt48l-default.dat
E. 重新编译工程
一般修改后都是重新编译工程来测试效果,使用remake android命令即可.
F. 如果执行./icu_dat_generator.py报以下错误
Traceback (most recent call last):
File ./icu_dat_generator.py, line 296, in
main()
File ./icu_dat_generator.py, line 261, in main
icu_version = re.sub(r([^0-9]), , os.path.basename(input_files[0]))
IndexError: list index out of range
可能是环境变量没有配置好,请使用绝对路径,而不是相对路径。

与icu编译问题相关的资料

热点内容
天正怎样炸开加密图纸 浏览:663
轮胎出气解压 浏览:430
最好的自己pdf 浏览:301
哈弗vv7压缩机不工作 浏览:466
什么电脑app可以看老友记 浏览:742
服务器如何删除安装包 浏览:890
编译器代码查找键 浏览:265
音乐剧编译是啥 浏览:200
专家系统pdf 浏览:717
编译使用dos命令 浏览:52
我的世界服务器为什么有时候总是进不去 浏览:68
虹软算法工程师 浏览:180
程序员失业被带走 浏览:90
莱阳设计图纸加密价格 浏览:680
王者尝试连接服务器是什么意思 浏览:396
有云服务器可以做穿墙吗 浏览:187
安卓如何彻底删除浏览器 浏览:206
什么橙APP买吃 浏览:328
如何管理服务器帐号 浏览:839
linuxgenymotion 浏览:962