[实践OK]2014年Linux下源码安装Subversion及Apache成功实践,编译subversion里出现gcc的问题,想通过centos 6.6 升级gcc 不一定能解决error: C compiler cannot create executables问题。

jackxiang 2014-11-8 12:24 | |
==========================================================================
安装成功参考URL,Linux下源码安装Subversion及Apache:
http://blog.csdn.net/tcpipstack/article/details/8680706
Apache 安装一定要加参数:--enable-dav --enable-so参数:

上面的模块都是双小中间短横,不是一个,是两个,前几次编译都给搞一个,没编译出来这个svn的动态so。
总结:出现这种情况有可能三种情况:
1)rpm包不全。
2)rpm包32位和64位混用。
3)可能给CFLAGS加上不同的参数了,在启动时就加上了,如方便编译arm,得清掉这样的影响。
————————————————————————————————————————————————————————————
背景:今天安装http://mirrors.hust.edu.cn/apache//apr/apr-1.5.1.tar.gz 的时候,执行./configure --prefix=/usr/报错“configure: error: C compiler cannot create executables”;当时很疑惑,各种包都装了怎么会这样,原以为是gcc的问题,就把gcc整个全都卸了重装,但还是依然报错,然后换了memcached的版本也是不行,后来在网上找了一个,yum安装下就解决问题了。。。在此做个记录,也给有同样问题的朋友们解忧,主要是缺少一些库:
yum install glibc-*
还是不OK:
entos:  yum install zlib-devel.i686 3.出现错误:configure: error: C compiler cannot create executables 检查gcc版本,发现gcc版本是gcc-4.4,编译需要gcc-4.5,remove掉,重新安装,ok apt-get remove gcc-4.4 apt-get install gcc-4.5
http://blog.csdn.net/dyllove98/article/details/8917485
系统centos 6.3 32位 i386 自带gcc 4.4.6 升级到gcc 4.8
参考:http://www.cnblogs.com/zhangtingkuo/archive/2013/04/06/3002982.html
居然编译也依旧出现:
configure:4912: error: in `/data/software/subversion_Apache_SoftAll/apr-1.5.1':
configure:4915: error: C compiler cannot create executables
于是看了下:apr-1.5.1/config.log
configure:4864: gcc -O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w   conftest.c  >&5
`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.
cc1: error: unrecognized command line option "-mfpu=vfp"
这个玩意,想起来了,是编译树莓派时给在/root/.bashrc里加上的:
export PATH=/opt/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/:/opt/gcc-3.4.5-glibc-2.3.6/bin/:$PATH
export CFLAGS="-O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w"
于是去了,去了还一样,还不行,明白了,去了以前影响还在,得:export CFLAGS="",于是好了。
一搜网上,N年前我的博文里也描述过类似的问题,但那是由于32位和64位不同的rpm包引起的:
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=1976088
我本来想升级gcc的,升级还是不行,于是自己写个简单的测试下,就发现了,如下:
试写一个:
#include <stdio.h>
int main(){
printf("Helo,World");
return 1;
}

make helo
cc -O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w    helo.c   -o helo
`-mcpu=' is deprecated. Use `-mtune=' or '-march=' instead.
cc1: 错误:无法识别的命令行选项“-mfpu=vfp”
cc1: 错误:无法识别的命令行选项“-mfloat-abi=hard”
helo.c:1: 错误:-mtune=switch所带参数(arm1176jzf-s)不正确
make: *** [helo] 错误 1

想起来了:做树莓派时给加了新的参数:
获得ARM GCC 交叉编译器
cd work/raspberry
git clone git://github.com/raspberrypi/tools.git
  这里官网下载可能比较慢,可以到我的资源下载 为 bcm2708hardfp编译器,和官方一样的
   http://download.csdn.net/detail/canyue102/6725615
安装该编译器,把编译器路径加入到环境变量中:
gedit ~/.bashrc
在最后一行添加:
export PATH=$PATH:/your_dir/tools-master/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/
在终端执行:
export CFLAGS="-O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w"

上面加export来自:http://www.csdn123.com/html/technology/2013/20131218/3796.htm
/gcc-build-4.8.0# vi ~/.bashrc
export PATH=/opt/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/:/opt/gcc-3.4.5-glibc-2.3.6/bin/:$PATH
export CFLAGS="-O2 -pipe -mcpu=arm1176jzf-s -mfpu=vfp -mfloat-abi=hard -w"

——————————————————————————————————————————————————————————
开始摘录:
参考:http://www.cnblogs.com/zhangtingkuo/archive/2013/04/06/3002982.html

http://blog.csdn.net/magicyang87/article/details/7972169



1.下载源码包
wget http: //ftp.gnu.org/gnu/gcc/gcc-4.8.0/gcc-4.8.0.tar.bz2
解压: tar -jxvf  gcc-4.8.0.tar.bz2

2.下载编译所需依赖库
cd gcc-4.8.0
./contrib/download_prerequisites
cd ..

3.建立编译输出目录
mkdir gcc-build-4.8.0

4.进入此目录,执行以下命令,生成makefile文件
cd  gcc-build-4.8.0
../gcc-4.8.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

5.编译
make -j4
如果编译成功,则时间是比较长的,半个小时左右,所以如果你看它一直在输出没有立刻停下来,应该很开心!

6.安装
sudo make install

7.切换GCC到新版
确定新安装的GCC的路径,一般默认在/usr/local/bin下。可以先updatedb,然后locate gcc-4.8|tail找一下
ls /usr/local/bin | grep gcc
添加新GCC到可选项,倒数第三个是名字,倒数第二个参数为新GCC路径,最后一个参数40为优先级,设大一些之后就自动使用新版了
update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/i686-pc-linux-gnu-gcc 40

8.确认当前版本已经切换为新版
gcc -v
我这里用ssh远程的,发现版本没变,断开重练下,重新生成会话后发现变成了4.8了!


看起来很顺有木有?!
心酸的弯路不知道走了多少呢!
以下是辛酸史。。
=================万恶的分割线===========================
首先是参考我们伟大的头儿的博客, http://blog.csdn.net/yanxiangtianji/article/details/8365630。

坑一、libstdc++-static

他这过程也是参考各种博客集成而来,因为我网上看大部分第一步都是: yum install glibc-static libstdc++-static -y
可其实centos的源上根本没有 libstdc++-static,第一个是有的,请安装。
坑爹的是,按照教程进行到编译make 之后,查看目录下的config.log 文件 ,搜索err,果然报 static- libstdc++的错!
这下我可认真了,死都要把 libstdc++-static装上。
首先,换centos的源,换了163的源(http://www.cnblogs.com/peterpanzsy/archive/2013/04/07/3003387.html),不行,后来跑oschina上提问,大神说epel源上应该有,于是换epel的源,仍然屁都没有!
于是去下rpm包,centos的软件包又不多,只能去下fedora的,一个家族的可以一试,epel源两者也通用的。
rpm -ivh xxx.rpm
结果出现依赖问题,于是下了这么一堆:
可是安装第一个的时候又跟系统自带的4.4.6版本的冲突,尼玛的,yum remove又因为依赖关系不可行,总不能卸载自带的gcc 4.4.7吧,后面编译新的gcc还要靠它呢,不能冲动。
今天上午就是乱搞,搞到报kernel的错,下午花了一个小时重装的系统。
还有一个原因,大神误以为他当年6.3的centos是成功yum装上了 libstdc++-static,于是我顺道重装的时候换成了centos6.3的版本,开始是6.4的其实。
最后发现6.3的源上也没有这个神奇的东西。
于是对安装 libstdc++-static绝望了。。。放弃。

坑二、三个依赖库是否要手动编译安装的问题。

进入gcc目录,执行:

./contrib/download_prerequisites

下正确版本的载那三个依赖的库。

大神说:可惜它不能自动配置编译安装,可以用我写的这个脚本来执行(假设当前是在contrib文件夹下):
cd gmd
./configure
make install
cd ../mpfr
./configure
make install
cd ../mpc
./configure
make install
可是真的要装吗?尼玛装完之后显然会出问题的!至少在我的实践里。我在网上偶然间看到有人这么说了一句,放心上了。
这么手动一装之后,编译gcc,直接报两个error停掉了,然后就出现第一步搜到的 libstdc++-static错误。

后来跳过手动装gmd  mpfr mpc之后,才执行了编译成功了。。。

坑三、共享库路径的问题

因为大神那篇博客里说以上的三个共享库不在系统默认路径下。
我们可以搜一下:locate mpc|grep so
   确实有/usr/local/lib/libmpc.so
可是当我在 /etc/ld.so.conf.d下面加上/usr/local/lib路径后执行ldconfig又报错,估计下面没有找到合法的库文件吧。
于是去掉,并且没有产生什么影响。


我是真心不知道大神那个是怎么会那么复杂的。。

来自:http://blog.csdn.net/dyllove98/article/details/8917485
实践情况:
/gcc-4.8.0# ./contrib/download_prerequisites
cd ..
mkdir gcc-build-4.8.0
cd  gcc-build-4.8.0
configure: error: in `/data/software/subversion_Apache_SoftAll/gcc-build-4.8.0':
configure: error: C compiler cannot create executables
See `config.log' for more details.


——————————————————不是这个问题,老老实实的安吧遇到确啥加上---------------------------

安装步骤原始来源:http://blog.csdn.net/tcpipstack/article/details/8680706
最新下载地址:
http://downloads.sourceforge.net/project/pcre/pcre/8.36/pcre-8.36.zip?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpcre%2Ffiles%2F&ts=1415418215&use_mirror=jaist
http://www.openssl.org/source/openssl-1.0.1j.tar.gz
http://mirrors.hust.edu.cn/apache//apr/apr-1.5.1.tar.gz
http://mirrors.hust.edu.cn/apache//apr/apr-util-1.5.4.tar.gz

解决 configure: error: C compiler cannot create executables
2014年03月17日 ⁄ Linux ⁄ 共 241字 ⁄ 暂无评论 ⁄ 被围观 2,049 views+

今天安装memcached的时候,执行./configure --prefix=/usr/报错“configure: error: C compiler cannot create executables”;当时很疑惑,各种包都装了怎么会这样,原以为是gcc的问题,就把gcc整个全都卸了重装,但还是依然报错,然后换了memcached的版本也是不行,后来在网上找了一个,yum安装下就解决问题了。。。在此做个记录,也给有同样问题的朋友们解忧,主要是缺少一些库:

yum install glibc-*
还是不OK:
entos:  yum install zlib-devel.i686 3.出现错误:configure: error: C compiler cannot create executables 检查gcc版本,发现gcc版本是gcc-4.4,编译需要gcc-4.5,remove掉,重新安装,ok apt-get remove gcc-4.4 apt-get install gcc-4.5
http://blog.csdn.net/dyllove98/article/details/8917485
系统centos 6.3 32位 i386 自带gcc 4.4.6 升级到gcc 4.8
参考:http://www.cnblogs.com/zhangtingkuo/archive/2013/04/06/3002982.html
——————————————————————————————————————————————————————————
安装APR
Apr & apr-util的下载地址:http://apr.apache.org/download.cgi
[plain] view plaincopy
    cd apr-1.4.6  
    //  
    ./buidconf  
    //  
    ./configure -h  
    //  
    ./configure --prefix=/usr/local/apr/  
编译和Install
[plain] view plaincopy
    make  
    make install  
configure时出现rm: cannot remove `libtoolT': No such file or directory问题解决办法:https://jackxiang.com/post/7619/

安装APR-UTIL
下载地址:http://www.fayea.com/apache-mirror//apr/apr-util-1.5.1.tar.bz2
安装步骤:
[plain] view plaincopy
    cd apr-util-1.5.1  
    ./buildconf  
    ./configure --prefix=/usr/local/apr-util/  
    ./configure --prefix=/usr/local/apr-util/ --with-apr=/usr/local/apr  
     make  
     make install  
安装OpenSSL
下载OpenSSL,地址是http://www.openssl.org/source/openssl-1.0.1d.tar.gz
安装过程:
[plain] view plaincopy
    #tar -xvf openssl-1.0.1d.tar.gz  
    #cd openssl-1.0.1d  
    #./config --prefix=/usr/local --openssldir=/usr/local/openssl  
    #make  
    #make test  
    #make install  
安装PCRE
下载pare,地址:http://nchc.dl.sourceforge.net/project/pcre/pcre/8.32/pcre-8.32.tar.gz
解压之后安装:
[plain] view plaincopy
    cd pcre-8.32  
    ./configure -h  
    ./configure --prefix=/usr/local/pcre  
    make  
    make install  
继续安装Apache HTTP Server,./configure 时加上参数 --with-apr=/usr/local/apr/ --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre,这个问题就解决了:
[plain] view plaincopy
    ./configure --prefix=/usr/local/svn --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre/  
注意:Apache在安装时不会检查参数是否正确,错误的参数会直接被丢弃,不会报告给用户。但可以使用echo $?命令检查是否有错误,当输出结果为0时表示没有错误。

serf 这个库提供的是对http和https协议的支持。值得说明的是,1.8版本之前这里依赖的是neon,1.8之后改成了serf。这里用的是serf-1.2.1

编译:./configure --prefix=/usr/local/serf --with-apr-util=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install

/usr/bin/ld: cannot find -lexpat
collect2: ld returned 1 exit status

yum install expat
rpm -ql expat-2.0.1-11.el6_2.x86_64
/lib64/libexpat.so.1
/lib64/libexpat.so.1.5.2

vi /etc/ld.so.conf
/lib64/
这两行有用然后:
yum install expat
yum install expat-devel
./configure --prefix=/usr/local/serf --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
make && make install

安装subversion:
http://pkgs.fedoraproject.org/repo/pkgs/libserf/serf-1.3.4.tar.bz2/9820da2c46ee10773309f0de657cddfd/
serf-1.3.4.tar.bz2  放到那个subversion源码的temp目录下后:
root@119.10.6.23:/data/software/subversion_Apache_SoftAll/subversion-1.8.10# ./get-deps.sh
Local directory 'zlib' already exists; the downloaded copy won't be used
Local directory 'sqlite-amalgamation' already exists; the downloaded copy won't be used
Local directory 'apr' already exists; the downloaded copy won't be used
Local directory 'apr-util' already exists; the downloaded copy won't be used

./configure --prefix=/usr/local/subversion --with-apxs=/usr/local/apache2/bin/apxs \
--with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-zlib \
--with-openssl --enable-maintainer-mode --with-serf=/usr/local/serf --enable-mod-activation

make && make install

检查svn是否支持http方式:
svn --version
配置svn请参考:http://blog.linuxeye.com/95.html
参考:
http://subversion.apache.org/docs/release-notes/1.8.html
http://code.google.com/p/serf/

1)建立版本库(Repository),配置subversion和http的关系:
mkdir -p /data/subversion/repositories
chown -R www:www /data/subversion/repositories

2)如果版本库的增改次数很频繁,可以写一个简单的脚本来实现快速调用:

3)接下来就是apache的配置了,这里要保证两个模块都已经正确放到模块目录中,检查是否安装成功看有没有加入下面两行:
安装成功会在/usr/local/apache2/conf/httpd.conf自己加入下面2行
LoadModule dav_svn_module     /usr/local/subversion/libexec/mod_dav_svn.so
LoadModule authz_svn_module   /usr/local/subversion/libexec/mod_authz_svn.so

4)Httpd下的svn扩展配置文件如下:
httpd.conf


5)配置文件里的文件:
cat /usr/local/apache2/conf/vhost.d/svn.boosh.com.cn.grp
admin: chluo jackxiang builder oscarzhu samonma yongwang bluexchen samliang phillipzhang dalazheng jasoncao ianzhang harry sally
ozzyad: marvin richard mandy ben amy vincent sam gary adam
ssd: kary
jgys_sz: zh_jgys lhq_jgys
haoyang: haoyang
mihekeji: mihekeji

cat  /usr/local/apache2/conf/vhost.d/svn.boosh.com.cn.pwd
sally:Y.FJC2U7MqJOU
harry:udpIl6wCO.LuI
jackxiang:cCkclYr9pb98o

6)启动: /usr/local/apache2/bin/apachectl start
启动apache出现undefined symbol: dav_register_provider错误:
从网上找了原因,是因为编译apache的时候没有加上
--enable-dav --enable-so参数
是因为--enable-dav 启用davweb支持,是subversion+apache组合必选,缺少的话,在运行apache会出现undefined symbol: dav_register_provider的错误
重新编译了一遍,OK了。摘自:http://blog.sina.com.cn/s/blog_5d15305b0101cn6q.html
还不行:
解决方法:
svn安装在 /usr/local/subversion,检查/usr/local/subversion/modules,里面已包含mod_authz_svn.so 与 mod_dav_svn.so。
要将他们复制或链接到apache的modules目录中才可以。

以前在自己的Vmware下面配置成功过,上面这些是在自己的那个vps上配置,以前配置成功的链接,特别是关于https这块的配置,得参考:
https://jackxiang.com/post/4229/

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/7618/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2017-11-10 15:26
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]