自FreeBSD10以后,默认的编译器不再使用GCC,而由于各种原因,很多程序必须用gcc编译,用Clang则会出各种问题。在FreeBSD使用这类程序时,必须强制使用gcc进行编译。
首先,需要安装gcc,在FreeBSD中,gcc有多个版本,可以用find找一下:
% find /usr/ports/lang -type d -name "gcc*"
/usr/ports/lang/gcc-aux
/usr/ports/lang/gcc-ecj45
/usr/ports/lang/gcc
/usr/ports/lang/gcc34
/usr/ports/lang/gcc44
/usr/ports/lang/gcc46
/usr/ports/lang/gcc47
/usr/ports/lang/gcc48
/usr/ports/lang/gcc49
可以根据实际需要安装对应的版本,默认版本现在是gcc47,没有特殊情况,一般用gcc47或gcc48(截止2014年6月),以下以gcc48为例。
安装GCC,没有必要进行编译,直接用pkg安装就可以了:
pkg install gcc48
要注意,gcc48安装后,直接输入gcc会提示找不到命令,因为gcc48安装后,并没有生成默认的gcc,而是gcc48:
% whereis gcc
gcc: /usr/src/contrib/gcc
% whereis gcc48
gcc48: /usr/local/bin/gcc48 /usr/local/man/man1/gcc48.1.gz /usr/ports/lang/gcc48
可以发现,gcc48的程序名叫:gcc48,这种命名法有个好处,就是可以让多个gcc的版本共存,再添加gcc47,gcc44的时候,不至于为了争用gcc这个名字而相互冲突。
另外,由于/usr/local/bin正常情况在大多数用户的PATH环境变量中,所以在手动指定编译器的时候,可以不用路径。
其次,编译程序时指定用gcc48进行编译,这有三种情况:
(1)ports中。
Ports有个指定编译器的选项,是“USE_GCC”,可以在Makefile中直接添加这个变量:
USE_GCC=yes
这个配置指用默认的gcc版本
USE_GCC=any
这个配置指所有版本
USE_GCC=4.7+
这个配置指4.7以上版本
(2)不在Ports中,但是提供了Makefile,可以直接在Makefile中修改,主要是:
CC = gcc48
CCDEPMODE = depmode=gcc3
CPP = gcc48 –E
(3)仅提供了configure,这种情况下,要用环境变量,这样在产生的Makefile中,会有gcc48的字样:
setenv CC gcc48
./configure
该贴由hui.chen转至本版2014-11-5 17:04:58