皮皮网
皮皮网

【联芯1860源码】【狂野车神源码】【源码减补码】ucontext源码

来源:同城顺风车源码 发表时间:2024-11-27 05:53:49

1.GCC 源码编译安装
2.微信libco协程库源码分析
3.Ubuntu20.04 下手动编译安装gcc-6.3.0安装,源码多版本GCC 共存和切换

ucontext源码

GCC 源码编译安装

       前言

       本文主要介绍如何在特定条件下,源码通过源码编译安装GCC(GNU Compiler Collection)4.8.5版本。源码在Linux环境下,源码特别是源码遇到较老工程代码和低版本GCC适配问题时,网络仓库不可用,源码联芯1860源码可通过下载源码进行本地编译安装。源码文章总结了该过程的源码步骤,以期帮助读者解决类似需求。源码

       Linux系统版本:SUSE Linux Enterprise Server SP5 (aarch) - Kernel \r (\l)

       GCC版本:gcc-4.8.5

       步骤如下:

       1,源码源码下载

       直接在Linux终端执行:wget ftp.gnu.org/gnu/gcc/gcc...

       或手动下载:ftp://gcc.gnu.org/pub/gcc/infrastructure

       选取对应的源码gcc版本下载。

       2,源码解压并进入目录

       解压下载的源码狂野车神源码tar包:tar -jxvf gcc-4.8.5.tar.bz2

       进入解压后的目录:cd gcc-4.8.5

       3,配置依赖库

       联网情况下:cd gcc-4.8.5/

       ./contrib/download_prerequisites

       无法联网时,源码手动下载依赖库(如mpfr、源码gmp、mpc)并上传到指定目录,然后分别解压、重命名并链接。

       4,创建编译存放目录

       在gcc-4.8.5目录下执行:mkdir gcc-build-4.8.5

       5,生成Makefile文件

       cd gcc-build-4.8.5

       ../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib

       推荐配置时,根据环境调整参数,如X_环境下的`--disable-libsanitizer`。

       6,源码减补码执行编译

       make(可能耗时较长)

       解决可能出现的问题,如libc_name_p和struct ucontext uc,通过参考gcc.gnu.org/git或直接覆盖相关文件。

       7,安装GCC

       在gcc-build-4.8.5目录下执行:make install

       安装完成后,可直接解压并安装。

       8,配置环境变量

       执行命令:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/gcc-4.8.5/mpc:/root/gcc-4.8.5/gmp:/root/gcc-4.8.5/mpfr

       确保路径一致,执行 source /etc/profile 使环境变量生效。

       9,检查安装情况

       通过`gcc -v`和`g++ -v`验证GCC版本。

       ,studioone机架源码库升级

       遇到动态库未找到问题时,需升级gcc库,通过查找和替换最新库文件解决。

       ,卸载系统自带的gcc

       以root用户执行:rpm -qa |grep gcc | xargs rpm -e --nodeps

       ,修改ld.so.conf文件

       编辑文件:vi /etc/ld.so.conf,在最下面添加实际路径,如/usr/local/lib和/usr/local/lib。

       执行 ldconfig /etc/ld.so.conf。

       ,修改GCC链接

       确保GCC及其相关工具的正确链接,使用`ll /usr/bin/gcc*`和`ll /usr/bin/g++*`检查链接结果。拟合圆源码

       至此,GCC源码编译安装流程完成,可满足特定环境下的GCC版本需求。

微信libco协程库源码分析

       微信后台开发常用的libco协程库,是一种罕见的将C/C++协程应用于大规模生产环境的成功案例。相较于coroutine,libco在性能上表现出调度千万级协程的能力。它的优势主要体现在以下几个方面:

       更高效的协程上下文切换:libco通过自编汇编代码,仅保存和交换必要的寄存器和栈信息,与ucontext相比,显著提升了切换效率,据测试,其效率大约是ucontext的3.6倍。

       自动处理IO阻塞:libco能自动切换到其他协程,包括处理三方库的阻塞IO调用,如mysqlclient,通过Linux的hook技术和epoll机制无缝协作。

       灵活的栈管理:支持共享或独立栈空间,用户可自定义协程栈大小,以适应不同的需求。

       高效协作与通信:提供类似pthread的接口,便于协程间通信,而且支持协程嵌套创建,直观模拟了调用栈的运行过程。

       在使用上,libco允许零改造的将阻塞IO调用异步化,并且在协程的维护和资源使用上,有着丰富的运营经验,如限制协程栈大小、提倡池化使用以及区分计算密集和网络密集任务。

       尽管libco在开源活跃度上有所欠缺,但其开发者正在内部尝试引入新特性,如事件回调和类golang的channel,未来有望为社区带来更多改进。总的来说,libco以高性能和易用性展示了协程的强大潜力。

Ubuntu. 下手动编译安装gcc-6.3.0安装,多版本GCC 共存和切换

       在Ubuntu .环境下,为编译Matlab的mex函数,需要特定版本的gcc-6.3.0。尽管sudo apt-get默认安装的是6.5.0,而较新版本的如gcc-8, gcc-9, gcc-可以通过apt-get安装。以下是手动编译和安装gcc-6.3.0,以及处理多版本GCC共存和切换的步骤:

       1. 首先,你需要从ftp.gnu.org/gnu/gcc/下载gcc-6.3.0的源代码。

       2. 安装时,确保使用自定义路径,如--with-gmp=$HOME/local/ --with-mpfr=$HOME/local/ --with-cgal=$HOME/local/,这与你的安装目录相关。

       3. 配置和编译过程可能耗时且可能出现错误,例如configure期间可能遇到`CC' has changed since the previous run`的错误,解决方法是运行`make distclean`或`rm ./config.cache`重置。

       4. 在遇到`error: dereferencing pointer to incomplete type 'struct ucontext'`错误时,这是由于struct定义不完整引起的。需要修正相关变量uc_的代码。

       5. 另一个问题是关于`sanitizer_platform_limits_posix.cc`中的sys/ustat.h文件问题,需要在适当位置插入预计算的Linux结构ustat大小。

       6. 在sanitizer_common/sanitizer_internal_defs.h文件中,可能会遇到数组大小负数的错误。在configure时,可以考虑注释掉--disable-libsanitizer以解决这个问题,特别是如果你不使用golang。

       总之,手动编译gcc-6.3.0在Ubuntu .上需要细心处理各种编译时的问题,并且需要根据错误信息进行相应的调整,同时要处理不同GCC版本的共存和切换。

相关栏目:知识