在bsd上跑ndk-build

bsd一直是个官方不咋支持的Android开发平台…… 不过靠着linux兼容层,还是可以混混的…… 首先是ndk-build会报不支持的os(FreeBSD)和arch(amd64),而且ndk-build并不会使用环境变量里定义的值。所以有两个办法: 1. 直接调用gmake env HOST_OS=linux HOST_ARCH=x86 gmake -f $NDK_DIR/build/core/build-local.mk 这样啥都不用改。 2. 修改ndk-build 把HOST_OS设置成linux,HOST_ARCH设置成x86,并且export出来。 再把GNUMAKE设置成gmake,否则会调自带的linux版gmake导致一些麻烦的事情…… 然后直接跑就行了。 跑了之后会碰到一个问题:ld会segmentation fault。看系统log可能是因为fallocate和fstatfs64系统调用没有实现的关系。 解决办法是,到ndk目录里的toolchains/*/prebuilt/linux-x86/…/bin/,如果有ld.gold,那把老的ld干掉,改成到ld.bfd的符号链接。老的ld就是ld.gold…… 其实就是gold那个新的ld调了一些新的bsd还没实现的linux的system call…… 用老的bfd里的ld就没事了……

在FreeBSD上装linux skype 4

折腾了一个晚上好歹是搞出来了…… 起因是把linux_base更新到了linux_base-c6,也就是CentOS 6。这是个相当新的版本,各种rpm找起来也比较容易。 但是问题是,ports里其他linux包基本都是老的,要么是fc4的,要么是f10的…… 反正用不了。于是统统删掉。但是这样linux程序基本就跑不了,缺很多包…… 于是就自己搞rpm来装。但是rpm这回又不好使,试了ports里rpm3/4/5貌似都不行。 怀疑是因为rpm调了cpio,而FreeBSD 8-STABLE里的cpio貌似还不支持xz? 因为CentOS那些新包是xz压缩的,于是就解不了。 后来干脆不管rpm了,搞个脚本: if [ ! -f $1 ]; then wget http://mirror.yandex.ru/centos/6.2/os/i386/Packages/$1 fi rpm2cpio $1 | unxz > ~/tmp cd /compat/linux sudo cpio -idv < ~/tmpif [ ! -f $1 ]; then wget http://mirror.yandex.ru/centos/6.2/os/i386/Packages/$1 fi rpm2cpio $1 | unxz > ~/tmp cd /compat/linux sudo cpio -idv < ~/tmp …

Continue reading ‘在FreeBSD上装linux skype 4’ »

ibus 1.4.0在gvim里的输入问题

ibus 1.4.0在gvim里有些问题。具体来说,启动gvim之后数秒内无法输入,之后控制台输出 (gvim:77687): IBUS-WARNING **: Process Key Event failed: Timeout was reached 这句话,之后在gvim里可以输入,但是用不了输入法。 根据研究貌似是gvim的问题,FreeBSD的vim还停留在7.3.121,而新的vim,例如7.3.315就没有问题。 这个问题的报告: http://code.google.com/p/ibus/issues/detail?id=1249 https://bugzilla.redhat.com/show_bug.cgi?id=673438 有个workaround是gvim -f,但是毕竟麻烦。 于是手工改了个vim 7.3.315的port,用着挺好…… 除了切输入法的时候会输入一个空格以外…… FreeBSD的vim留在7.3.121是有原因的。首先是7.3.122这个补丁打完之后无法编译。 其实7.3.122是说,不附带src/auto/config.mk,在顶级目录Makefile里加上自动复制src/config.mk.dist为这个文件…… 但是可能是BSD这边编译方法的问题,没有直接跑顶级Makefile,于是缺文件…… 其实自己复制过去就好了。 之后是7.3.225这个补丁打不上。貌似原因是patch数错行数了…… 或许是^M这些东西的关系。 解决方法是在test79.in和test79.ok最后加些只有”+”的行。加到正好数量对为止…… 反正这俩文件也没啥关系 于是现在用着vim 7.3.315,感觉很好…… ibus也没有问题……

更新ibus和ibus-pinyin的ports到1.4.0

其实早就该更新的…… 不过之前尝试了一下,觉得1.4.0不咋的,还有些问题,于是没管…… 结果终于有好心人搞了个1.4.0的patch,还群发邮件说各位基于ibus的ports的maintainer们,快更新吧! 他顺便还加上了GTK3支持的选项,看来大家都要渐渐向GTK3迁移了么…… 在那个patch的基础上,提了些修改,现在在等待commit…… 具体来说: * 貌似其实ibus不依赖Qt?为啥从前加上去了呢…… 于是去掉了 * 没有post-deinstall这个target的,应该在pkg-plist里用@unexec来执行卸载命令的…… 所以从前的ibus port删除之后,是不会更新gtk2的immodules列表的…… 这么多时间了也没人发现…… 为了这个,ibus-pinyin也更新到1.4.0。但是ibus-pinyin 1.4.0居然要编译器支持c++0x…… BSD的古老的gcc 4.2怎么行…… 于是就让port依赖gcc 4.4+,没办法…… 其实ibus-pinyin还有个替代选项是用boost,但是开了之后没法编译。虽说打个补丁应该可以,但是太麻烦…… 另一个好处是,现在就不依赖boost了…… 其他更改: * 不知道为啥,ibus-pinyin有个${DBTAR}在DISTFILES里,而这个东西没定义过…… 删了删了 * 去掉boost支持,反正依赖gcc 4.4+了…… * RUN_DEPENDS单独定义。这个是portlint说的,说BUILD_DEPENDS其实还有别的东西,不能直接赋给RUN_DEPENDS * 目前禁用lua扩展。反正也没人用…… * 加了俩选项,选择是否编译Android DB和OpenPhrase DB。貌似是俩词库,OpenPhrase 那个挺大…… * 加了选项是否依赖opencc进行简繁转换 ibus 1.4.0在gvim里有些问题,换篇文讲吧…… 于是就等待commit了~

NTFS分区丢文件的问题……

之前发生了好几次,在FreeBSD下往NTFS分区拷东西,结果之后去win下一看,不见了…… 关于这个问题,找到过一个原因:如果先启动BSD,然后卸载某个NTFS分区,开一个直接使用那个NTFS分区的Win虚拟机,Suspend那个虚拟机,挂上那个分区,写东西,卸载,再Resume并正常关闭那个虚拟机,文件就会丢…… 这个问题挺好理解的,就是Win虚拟机自己保存了一些数据结构,你在Suspend期间对那个分区写的内容,Win虚拟机不知道。等他把数据结构flush回去,自然中间的改动就丢了…… 之后还是出这个问题,最近又找到一个原因:如果往NTFS分区复制文件,之后用reboot命令重启,文件也会丢…… 这个原因貌似是reboot是个很彪悍的命令,它不运行rc.d里那些脚本来停止服务,直接对所有进程发SIGTERM…… 于是cache里的数据没flush出去,那些文件就丢了…… 不过貌似这样文件是丢了,可用空间却会变少…… 如果在Win下检查NTFS分区,会说已使用位图不正确…… 以后不用reboot了…… 要不要直接alias掉呢…… 说起来init 6倒是没有问题…… shutdown -r自然也没有问题…… 这些都是好好地先停掉服务的……