两个小问题解决记录:XCode中多Target时CFBundleDisplayName的多语言本地化;用C++写socket程序时编译错误说read和write找不到
第一个:在XCode同一个项目里创建了两个target一个代表完整版一个代表lite版。按照网上找的方法对完整版的InfoPlist.strings做了本地化,CFBundleDisplayName有中英两个版本,可以成功实现App应用名称的本地化。对lite版,新建了一个InfoPlist-lite.strings文件,也照样弄了en和zh两个版本,但lite版的显示名称就始终是Product Name所指定的字符串,没能实现本地化。
最后经试验,发现这个.strings文件的名称必须得是InfoPlist.strings才能被认,不像Info.plist那个文件可以任意命名只要在Build Settings里设置即可。所以最后是新建了另一个目录专门去放Lite版的InfoPlist.strings文件,解决。
第二个:原先用C写了个简单的socket通信程序,gcc编译及运行都没问题。把后缀改成cpp,用g++编译就出错,说对socket进行读写的write和read不能被识别:
error: use of undeclared identifier 'write'
error: use of undeclared identifier 'read'
又上网查了一下,终于想起来,C++调用C的函数是应该用extern "C"声明一下的。可能是write和read所在的那个C函数库太老,它自己没有这样声明所以由于C++与C函数命名的不同造成编译器不识别。于是在自己的程序里加上声明就可以了:
extern "C" {
int write(int,void*,int);
int read(int,void*,int);
};
都是些小问题,呵呵。