关于squid-3.3.1在gcc-4.3.2+glibc-2.6.1的连接问题

2013-06-04

squid-3.3.1在crosstool下的环境下可以通过编译,但是连接的时候会出问题,从提示上看是cpu_affinity的问题,关于这一点,有许多文章讨论过,不再赘述,只是讲错误,连接错误提示’undefined reference to __sched_cpucount()’,这个问题开始考虑可以讲gcc连接的库置换为2.7,但是限于crosstool,在LDFLAGS添加的参数不起作用,这也是百思不得其解的地方。后来无奈,查阅代码,看到在squid-3.3.1代码中./compat/cpu.h里包换了对glibc- 2.7和2.6的支持,因为cpu_affinity始于libc2.6开始支持。可是好像是打包的libc版本问题,虽用objdump能看到该函数,但引用会失败。

所以天才的John&Sam组合想到,既然./compat/cpu.h文件中定义了CPU_COUNTCPU_AND,那即使有已经定义的CPU_COUNT,屏蔽之,用squid自带的实现使用就好了,不得不说这是个天才的想法,于是在./compat/cpu.h中添加一段代码:

#undef CPU_COUNT

在于

#ifndef CPU_COUNT

之前,将之写入patch文件是一个更好的方案,这就不用改动tar包,可以在crosstool环境下完美连接成功。

这个问题困扰了好久了,暂时有个方案能把它过了也算对努力的肯定吧。

记录下以后也许会有用。

另外发现GCC还有许多都不太懂,-L,-l,-I等参数的使用,Makefile中如何设定LDFLAGS, CPPFLAGS, CFLAGS, LIBS等变量等也都是需要学习的,不过好在这方便的资料比较多,学起来会比较轻松一点。