cmake在编译时,会生成一个依赖分析文件,如果你工程文件很多,里面又引用了很多系统的头文件,那么生成这个依赖文件可能有上百MB,扫描一次依赖可能要花很长时间。其实系统头文件不应该作为“依赖”(至少不需要扫描它,因为它不会变化)。在cmake中,使用INCLUDE_REGULAR_EXPRESSION(regex) 来指定哪些文件可以作为依赖。有了这个,cmake的速度能大大提高!
解决Fedora 15+ LiveDVD U盘安装需要网络连接的问题
使用官网下载的Fedora 15+上的DVD ISO烧的U盘启动的安装程序,非要使用网络连接才能安装。安装的时候在内核参数后加上askmethod即可选择安装介质。在此记录一下。
gcc下动态调用C++动态库非静态类成员函数
gcc C语言下动态调用动态库函数通过使用libdl来实现:
1 2 3 4 5 6 7 8 9 | #include <dlfcn.h> typedef void (*func_t) (int); int main () { void *handle = dlopen ("/usr/libtest.so", 0); func_t func = (func_t) dlsym ("FunctionName"); func (0); } |
dlsym 会将对应符号解析为函数指针。一般都应用在C函数的解析,对于某对象的非静态成员函数,又能怎么办呢?
C++的符号也许会被编译成 _ZN9KClassNameD4TestDv ,符号虽复杂,但在gcc的编译下,是一定的,用dlsym解析出来后,同样是一个函数指针,不过它的第一个参数,必须传递”ClassName”对象的一个this指针。
fedora 15硬盘安装需要网络连接的问题
Debian上架设ipv6 vpn
pptp和l2tp目前还没有能直接支持IPv6,然而IPv6目前实在是太诱人了,教育网内不限速不限流量,GFW似乎对IPv6还支持不好,所以架设一个ipv6的VPN还是挺划算的。
现在xl2tpd“监听”在1723 UDP4端口,可以使用socat监听到IPv6的UDP端口,然后转发至这个v4的端口,便可实现IPv6 VPN。
首先设置xl2tpd,参考http://apple4.us/2010/05/setting-up-l2tp-vpn-on-debian-ubuntu.html。
socat方面,先把xl2tpd“监听”到1724,然后有命令:
socat UDP6-LISTEN:1723,fork UDP:127.0.0.1:1724
便可。
庆祝本站开通 ipv6!
NDK工程的调试
最近在做一个Android项目的时候,用到了NDK的调试,在此记录下其实现方法。
NDK r4以上版本,提供了一个所谓 ndk-gdb 的脚本,执行这个脚本可以实现NDK工程的调试。然而在线程上设断点的时候gdb干脆就退出了,这是无甚意义的。这个问题的原因主要在于,当一个线程建立的时候,会去调用libc.so里的_thread_created_hook(),而gdb就在这个函数里设断点,于是gdb就知道某线程建立了,才可以调试。另外一个就是即使能线程能调试了,但是有时候回溯stack的时候,却啥都没有,那原因在于系统库的符号没有加载上。明白了这几点,调试就容易了。要做一个比较好的调试,需要拿到系统库的符号(包括libc.so)。


