【知识扩展】CC++编译案例

C\C++编译案例

  • 前言
  • 一、【——】GLIBC编译运行环境问题
  • 二、【案例】GCC源码安装依赖问题
  • 三、【扩展】Pkg-Config配置内容解析
  • 四、【扩展】头文件及库文件环境变量
  • 五、【案例】GCC源码安装依赖逻辑
  • 总结


前言

本篇旨在记录C语言程序编译安装及过程问题处理,以供日常回顾查找。


一、【——】GLIBC编译运行环境问题

H

[root@localhost libown]# gcc main.c -o exec -lc-2.13 -L/usr/libown/glibc-2.13/lib -Wl,-rpath=/usr/libown/glibc-2.13/lib && ldd ./exec && ./exec 
	linux-vdso.so.1 =>  (0x00007fff1c7f2000)
	libc.so.6 => /usr/libown/glibc-2.13/lib/libc.so.6 (0x00007f19af1bf000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f19af547000)
段错误
---------------------------------------------------------------------------------------------------------------------
[root@localhost libown]# gcc main.c -o exec -lc-2.25 -L/usr/libown/glibc-2.25/lib -Wl,-rpath=/usr/libown/glibc-2.25/lib && ldd ./exec && ./exec 
	linux-vdso.so.1 =>  (0x00007ffd9a667000)
	libc.so.6 => /usr/libown/glibc-2.25/lib/libc.so.6 (0x00007f3d607e9000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f3d60b83000)
     67322:	__vdso_time段错误
---------------------------------------------------------------------------------------------------------------------
[root@localhost libown]# gcc main.c -o exec -lc-2.25 -L/usr/libown/glibc-2.25/lib -Wl,-rpath=/usr/lib64 && ldd ./exec && ./exec 
	linux-vdso.so.1 =>  (0x00007fff42fd2000)
	libc.so.6 => /usr/lib64/libc.so.6 (0x00007f5b2f340000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f5b2f70e000)
a+b = 15
a_b = 5
---------------------------------------------------------------------------------------------------------------------
[root@localhost libown]# gcc main.c -o exec -lc-2.13 -L/usr/libown/glibc-2.13/lib -Wl,-rpath=/usr/lib64 && ldd ./exec && ./exec 
	linux-vdso.so.1 =>  (0x00007ffe297af000)
	libc.so.6 => /usr/lib64/libc.so.6 (0x00007f376fb4e000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f376ff1c000)
a+b = 15
a_b = 5

H


二、【案例】GCC源码安装依赖问题

gcc源码安装报错

checking how to compare bootstrapped objects... cmp --ignore-initial=16 $$f1 $$f2
checking for objdir... .libs
checking for the correct version of gmp.h... yes
checking for the correct version of mpfr.h... no
configure: error: Building GCC requires GMP 4.2+, MPFR 3.1.0+ and MPC 0.8.0+.
Try the --with-gmp, --with-mpfr and/or --with-mpc options to specify
their locations.  Source code for these libraries can be found at
their respective hosting sites as well as at
https://gcc.gnu.org/pub/gcc/infrastructure/.  See also
http://gcc.gnu.org/install/prerequisites.html for additional info.  If
you obtained GMP, MPFR and/or MPC from a vendor distribution package,
make sure that you have installed both the libraries and the header
files.  They may be located in separate packages.

报错内容说明要安装gcc需要GMP、MPFR、MPC这三个库;

mpfr源码安装报错

checking if __float128 can be used as a fallback... yes
checking for Static Assertion support... yes
checking whether gcc __attribute__ ((mode (XX))) works... yes
checking for gmp.h... yes
checking for recent GMP... yes
checking usable gmp.h at link time... yes
checking for GMP_NUMB_BITS and sizeof(mp_limb_t) consistency... yes
checking for __gmpz_init in -lgmp... no
configure: error: libgmp not found or uses a different ABI (including static vs shared).
Please read the INSTALL file -- see "In case of problem".

报错内容说明存在环境变量配置问题,无法链接静态库;


三、【扩展】Pkg-Config配置内容解析

.pc文件用途,pkg-config命令使用

[root@localhost o_rely]# tree gmp
gmp/
├── include
│   └── gmp.h
├── lib
│   ├── libgmp.a
│   ├── libgmp.la
│   ├── libgmp.so -> libgmp.so.10.4.1
│   ├── libgmp.so.10 -> libgmp.so.10.4.1
│   ├── libgmp.so.10.4.1
│   └── pkgconfig	
#	设置环境变量PKG_CONFIG_PATH | export PKG_CONFIG_PATH=/usr/local/o_rely/gmp/lib/pkgconfig
#	设置环境变量后,可使用命令pkg-config进行管理
│       └── gmp.pc
└── share
    └── info
        ├── dir
        ├── gmp.info
        ├── gmp.info-1
        └── gmp.info-2
---------------------------------------------------------------------------------------------------------------------
[root@localhost o_rely]# cat gmp/lib/pkgconfig/gmp.pc 
prefix=/usr/local/o_rely/gmp
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib

Name: GNU MP
Description: GNU Multiple Precision Arithmetic Library
URL: https://gmplib.org
Version: 6.2.1
Cflags: -I${includedir}
Libs: -L${libdir} -lgmp
---------------------------------------------------------------------------------------------------------------------
[root@localhost gmp]# pkg-config --list-all
gmp              GNU MP - GNU Multiple Precision Arithmetic Library
udev             udev - udev
dracut           dracut - dracut
systemd          systemd - systemd System and Service Manager
shared-mime-info shared-mime-info - Freedesktop common MIME database
---------------------------------------------------------------------------------------------------------------------
[root@localhost o_rely]# pkg-config gmp --cflags
-I/usr/local/o_rely/gmp/include  
[root@localhost o_rely]# pkg-config gmp --libs
-L/usr/local/o_rely/gmp/lib -lgmp  

四、【扩展】头文件及库文件环境变量

环境变量说明
C_INCLUDE_PATHC头文件
CPLUS_INCLUDE_PATHC++头文件
LIBRARY_PATH静态链接库
LD_LIBRARY_PATH动态链接库
LD_RUN_PATH动态链接库
export C_INCLUDE_PATH=/usr/local/o_rely/gmp/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/o_rely/mpfr/include
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/o_rely/mpc/include

export CPLUS_INCLUDE_PATH=$C_INCLUDE_PATH


export LIBRARY_PATH=/usr/local/o_rely/gmp/lib
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/o_rely/mpfr/lib
export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/o_rely/mpc/lib

export LD_LIBRARY_PATH=$LIBRARY_PATH
export LD_RUN_PATH=$LIBRARY_PATH

五、【案例】GCC源码安装依赖逻辑

首先在配置gcc的过程中会出现错误:gcc configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+

由于MPFR依赖GMP,而MPC依赖GMP和MPFR,所以要先安装GMP,其次MPFR,最后才是MPC。以下版本分别是gMP4.3.2,mpfr2.4.2和mpc0.8.1为例:

先开始安装GMP。解压GMP的压缩包后,得到源代码目录gmp-4.3.2。在该目录的同级目录下建立一个临时的编译目录,这里命名为gmp-build。然后开始配置安装选项,进入gmp-build目录,输入以下命令进行配置:

../gmp-4.3.2/configure --prefix=/usr/local/gmp-4.3.2

这里–prefix选项代表要将该库安装在哪里,我是装在/usr/local/gmp-4.3.2目录下,后面的安装都会用到这个选项。

这时在gmp的编译目录下就会生成一个makefile文件,编译安装即可。

mpfr和mpc的安装方法与此类似。不过要注意配置的时候要把依赖关系选项加进去,具体后面两个库配置命令如下:

../mpfr-2.4.2/configure  --prefix=/usr/local/mpfr-2.4.2 --with-gmp=/usr/local/gmp-4.3.2

../mpc-0.8.1/configure --prefix=/usr/local/mpc-0.8.1 --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2

安装好这三个库之后,就可以正式开始安装gcc了。

与此前一样,先建一个编译gcc的临时目录gcc-build,进入该目录后配置安装选项:

../gcc-4.4.3/configure --prefix=/usr/local/gcc-4.4.3 --enable-threads=posix --disable-checking --disable-multilib --enable-languages=c,c++ --with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2 --with-mpc=/usr/local/mpc-0.8.1

其中--with-gmp=/usr/local/gmp-4.3.2 --with-mpfr=/usr/local/mpfr-2.4.2 --with-mpc=/usr/local/mpc-0.8.1可以使用环境变量配置替代;


总结

本篇旨在记录C语言程序编译安装及过程问题处理,以供日常回顾查找。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值