使用INCLUDE_REGULAR_EXPRESSION加速cmake

cmake在编译时,会生成一个依赖分析文件,如果你工程文件很多,里面又引用了很多系统的头文件,那么生成这个依赖文件可能有上百MB,扫描一次依赖可能要花很长时间。其实系统头文件不应该作为“依赖”(至少不需要扫描它,因为它不会变化)。在cmake中,使用INCLUDE_REGULAR_EXPRESSION(regex) 来指定哪些文件可以作为依赖。有了这个,cmake的速度能大大提高!

VN:F [1.9.17_1161]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.17_1161]
Rating: 0 (from 0 votes)

解决Fedora 15+ LiveDVD U盘安装需要网络连接的问题

使用官网下载的Fedora 15+上的DVD ISO烧的U盘启动的安装程序,非要使用网络连接才能安装。安装的时候在内核参数后加上askmethod即可选择安装介质。在此记录一下。

VN:F [1.9.17_1161]
Rating: 9.0/10 (3 votes cast)
VN:F [1.9.17_1161]
Rating: +1 (from 1 vote)

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指针。

VN:F [1.9.17_1161]
Rating: 10.0/10 (3 votes cast)
VN:F [1.9.17_1161]
Rating: 0 (from 0 votes)

fedora 15硬盘安装需要网络连接的问题

最近在硬盘安装f15的时候要求网络连接,其原因在于安装程序没有去寻找镜像,解决办法在内核参数上加上 askmethod,安装过程便可选择镜像

VN:F [1.9.17_1161]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.17_1161]
Rating: 0 (from 0 votes)

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

便可。

VN:F [1.9.17_1161]
Rating: 10.0/10 (1 vote cast)
VN:F [1.9.17_1161]
Rating: -1 (from 1 vote)

c楼

image

西安电子科技大学

VN:F [1.9.17_1161]
Rating: 9.5/10 (2 votes cast)
VN:F [1.9.17_1161]
Rating: 0 (from 0 votes)

庆祝本站开通 ipv6!

blog.simophin.net以及simophin.net均为双栈域名。教育网用户访问可以获得满意的速度哦!

VN:F [1.9.17_1161]
Rating: 10.0/10 (1 vote cast)
VN:F [1.9.17_1161]
Rating: 0 (from 0 votes)

NDK工程的调试

最近在做一个Android项目的时候,用到了NDK的调试,在此记录下其实现方法。
NDK r4以上版本,提供了一个所谓 ndk-gdb 的脚本,执行这个脚本可以实现NDK工程的调试。然而在线程上设断点的时候gdb干脆就退出了,这是无甚意义的。这个问题的原因主要在于,当一个线程建立的时候,会去调用libc.so里的_thread_created_hook(),而gdb就在这个函数里设断点,于是gdb就知道某线程建立了,才可以调试。另外一个就是即使能线程能调试了,但是有时候回溯stack的时候,却啥都没有,那原因在于系统库的符号没有加载上。明白了这几点,调试就容易了。要做一个比较好的调试,需要拿到系统库的符号(包括libc.so)。

VN:F [1.9.17_1161]
Rating: 10.0/10 (1 vote cast)
VN:F [1.9.17_1161]
Rating: 0 (from 0 votes)