源码编译GCC和clang踩坑记录

一、源码编译安装clang-llvm:

sudo apt install gcc-multilib 
git clone --branch llvmorg-17.0.5 --recursive https://github.com/llvm/llvm-project  ##version_number可在官网查看,例如:17.0.5
cd llvm-project   
mkdir build
cd build
cmake ../llvm -DCMAKE_C_COMPILER=/usr/bin/gcc-11 -DCMAKE_CXX_COMPILER=/usr/bin/g++-11 -DCMAKE_CXX_LINK_FLAGS="-Wl,-rpath,/usr/lib64 -L/usr/lib" -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;lld;lldb;clang-tools-extra;polly;libclc" -DCMAKE_INSTALL_PREFIX=/usr/local/llvm-17 -DLLVM_ENABLE_RUNTIMES="libc;libunwind;libcxxabi;libcxx;compiler-rt;openmp" -DLLVM_BINUTILS_INCDIR=/usr/include

##可根据llvm proje目录下的projec添加ENABLE_PROJECTS   LLVM_BINUTILS_INCDIR 表示编译LLVMgold.so,编译链接需要用到次插件,该so需要提前安装bintuils并指定bintuils的头文件目录,具体参考LLVM gold插件安装步骤_gold链接器如何安装?-CSDN博客,在编译binutils的时候可能会报错以下信息:

此报错需要sudo apt install texinfo.

二、源码安装gcc

Linux之gcc源码安装步骤-CSDN博客

1、error: size ‘-1’ of array ‘assertion_failed__1163’ is negative
342 | typedef char IMPL_PASTE(assertion_failed_##_, line)[2*(int)(pred)-1]

解决办法:Fix sanitizer-common build with glibc 2.31 · llvm/llvm-project@947f969 · GitHub

按照上面链接的方式,修改源码对应源码即可编译通过。

2、使用gcc-7编译yuvsiq,最后链接OpenCV库的时候失败:

通过 strings "/lib/x86_64-linux-gnu/libstdc++.so.6" | grep LIBC   此版本对应gcc-11的glibc版本

在查看 strings "/home/share/gcc-7/lib64/libstdc++.so.6" | grep LIBC  此版本对应gcc-7的glibc版本

发现gcc-7没有GLIBCXX_3.4.26  GLIBCXX_3.4.30等等这些libc版本,由此可知道OpenCV库是有gcc-11编译的,所以在使用gcc-7去编译链接的时候,导致找不到对应版本的glibc而出错。

使用  readelf -s /usr/local/lib/libopencv_gapi.so.4.8.0  | grep -oP "GLIBCXX_[\d\.]*" | sort | uniq 查看对应的opencv库需要的GLIBC版本

解决办法:使用gcc-7编译OpenCV,通常情况高版本的gcc可以兼容低版本的gcc

3、使用clang编译Linux平台的yuvsiq报错omp.h not found

查看Omp.h not found - OpenMP - LLVM Discussion Forums

可以发现可能是在编译clang的时候没有启用和安装 openmp导致,在编译llvm的时候启用openmp即可。

4、使用gcc-7编译opencv的时候可能会遇到一些莫名其妙的错误,比如找不到xxx的定义之类的

可以使用以下cmake命令:

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules/ -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -DENABLE_CXX11=ON ..

其中ENABLE_CXX11=ON表示开启C11特性,可以规避一些编译问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值