无论是C的编译还是C++编译,以及Perl或者Java的编译都可以通过make来完成。
1,在make的过程中,我们一般使用GNU的方式,来生成.so(动态库)、.a(静态库)或jar(java包)的文件,而在make install的过程中,安装的.so或者.a文件则比在make的时候生成的文件小很多。
2,在一些老版本的Linux机器当中,如果当make的时候出现:
... relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object;recompile with -fPIC
/usr/lib/gcc/x86_64-redhat-linux/3.4.6/../../../../lib64/libxxxxxx.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
这时候,检查老版本的静态库gcc/g++是否使用过-fPIC进行过编译,一般x86_64平台都需要这个参数,而i386平台对这个参数不是很敏感;另外,如果没有静态库,则检查动态库是否连接正确,有的动态库是.so.xxx.0.0.0结尾,而不是以.so结尾,所以需要人工做一个软连接:
ln -sf libxxxxxx.so.xxx.0.0.0 libxxxxxx.so
3,32位机器上编译的包不能直接在64位机器上编译,如果需要进行编译,需要对gcc/g++设定一个参数-m32,保证gcc/g++在64位机器上编译出32位平台的包,但是值得注意的是,在任何情况下,不能将32位的库和64位的库来进行混合编译。