glibc

gcc 与 glibc 的关系 glibc版本查看

你离开我真会死。 提交于 2020-02-25 08:23:56
glibc是什么,以及与gcc的关系? glibc是gnu发布的libc库,也即c运行库。glibc是linux 系统中最底层的api(应用程序开发接口),几乎其它任何的运行库都会倚赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本 身也提供了许多其它一些必要功能服务的实现,主要的如下: (1)string,字符串处理 (2)signal,信号处理 (3)dlfcn,管理共享库的动态加载 (4)direct,文件目录操作 (5)elf,共享库的动态加载器,也即interpreter (6)iconv,不同字符集的编码转换 (7)inet,socket接口的实现 (8)intl,国际化,也即gettext的实现 (9)io (10)linuxthreads (11)locale,本地化 (12)login,虚拟终端设备的管理,及系统的安全访问 (13)malloc,动态内存的分配与管理 (14)nis (15)stdlib,其它基本功能 gcc 是编译器,基本上 Linux 下所有的程序(包括内核)都是 gcc 编译的,libc 当然也是。 gcc 和 libc 是互相依赖的两个软件,它们合作的方式类似 Linux 系统的 "自举"。先在一个可以运行的带有老 libc 和 gcc 的系统上,用老 gcc 编译出一个新版本的 gcc + 老 libc

在C代码调用C++代码

大兔子大兔子 提交于 2020-02-22 19:50:07
由于历史原因,以及不同开发人员的技术偏好,C语言和C++语言都有一些独有的非常有价值的项目,因而两种语言的互操作,充分利用前人造的轮子是一件非常有价值的事情。 C++代码调用C代码很简单,只要分别在包含的C头文件的开头和结尾加上如下的两个块: 123 extern "C" {#endif 和 123 }#endif 即可。 然而为了支持类、重载等更加高级的特性,在编译C++代码时,C++符号会被修饰。我们dump Linux平台加密库 libcrypto++ 的符号表,可以看到如下的内容: 12345678910111213141516171819202122232425262728293031323334353637383940414243 $ readelf -s /usr/lib/libcrypto++.soSymbol table '.dynsym' contains 9607 entries: Num: Value Size Type Bind Vis Ndx Name 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000000001daa58 0 SECTION LOCAL DEFAULT 9 2: 0000000000000000 0 OBJECT GLOBAL DEFAULT UND _ZTIi@CXXABI

HanLP pyhanlp 自定义分词词典

丶灬走出姿态 提交于 2020-02-22 17:21:14
词典格式: word pos\n 方法一:使用pyhanlp,具体方法如下: pip install pyhanlp # 安装pyhanlp 进入python安装包路径,如 /opt/anaconda3/lib/python3.7/site-packages/pyhanlp/static/ 将http://hanlp.properties.in改名为备份文件。 mv hanlp.properties.in hanlp.properties.in.bak 修改hanlp.properties vim hanlp.properties 向CustomDictionaryPath添加你自定义的词典路径,如: CustomDictionaryPath=data/dictionary/custom/self_define_dict.txt; 现代汉语补充词库.txt; 全国地名大全.txt; 人名词典.txt; 机构名词典.txt; 上海地名.txt ns; data/dictionary/person/nrf.txt nrf; 保存。 python脚本,调用pyhanlp示例: from pyhanlp import * print(HanLP.segment("在你想要放弃的时候,想想是什么让你当初坚持走到了这里。总是有人要赢的,那为什么不能是我")) 运行脚本后

linux安装nginx遇到的连环坑

半城伤御伤魂 提交于 2020-02-19 23:11:07
this statement may fall through [-Werror-implicit-fallthorugh=]错误 cd.current_salt[0] = ~salt[0]; 错误 网上安装的教程很多,之前也安装过很多次,几分钟就搞定,今天整整搞了我一天。(确保你的依赖包都正常的情况下,遇到的坑) 首先贴一下错误提示 看到其他人说,删掉 makefile 文件中的 -Werrori (大部分人在这里就可以解决) Werrori要求GCC将所有的警告当成错误进行处理,所以导致出错。 但遗憾的时,我删除后重新make又出现了新的错误。 啊。好难受,一坑接一坑,这个问题,有人在相关目录,就是ngx_user.c这个文件中,注释掉这行代码也解决了。 但遗憾的是,我注释掉又出现其他的错误。 最终解决这个问题的办法: 打开ngx_user.c这个文件,修改判断条件 #if defined(__GLIBC__) && !defined(CRYPT_DATA_INTERNAL_SIZE) /* work around the glibc bug */ 来源: CSDN 作者: 皮皮皮皮皮皮真皮 链接: https://blog.csdn.net/qq_24083561/article/details/104397759

超级DIY:制作运行在内存中的Linux系统

独自空忆成欢 提交于 2020-02-19 08:18:26
一般情况下,linux系统启 动过程是,写在MBR上的bootloader加载内核,然后加载初启环境,即initrd;在initrd中,一般有个叫init或linuxrc的脚 本(或ELF文件),该进程启动后,会先读取/etc/inittab下的内容,这是一个初始化表,用以确定执行/etc/rc.d下的哪个RC脚 本,RC脚本执行完毕后,文件系统基本上就得到所有的硬件信息了,进而加载真正的根分区。现在要做的是——将initrd作为根分区,这样,要做的事情主 要有四点:1.创建一个空间比较大的Ramdisk ,2.用busybox生成文件系统中必备的命令,用它的主要原因是占用空间小,3.添加或修改dev和etc下的文件,4.考虑添加一些应用程序,比如 ssh等。 操作系统:SlackWare12,内核版本:2.6.21.5-smp 1.创建一个空间比较大的Ramdisk #dd if=/dev/zero of=/tmp/ramdisk bs=1k count=92160 #losetup /dev/loop2 /tmp/ramdisk #mkfs.ext2 /dev/loop2 #mount -t ext2 /dev/loop2 /mnt 可以向/mnt下写东西了,然后 #umount /mnt 以后修改时,可以这样用 #gunzip ramdisk.gz //将initrd解压

TVM安装

大憨熊 提交于 2020-02-16 14:35:06
为什么选择TVM 为提升深度学习模型的推理效率,设备平台制造商针对自己的平台推出优化的推理引擎,例如NAVIDA的tensorRT,Intel的OpenVINO,Tencent针对移动端应用推出NCNN等。目前,深度学习模型应用广泛,在服务端和移动端都有应用,甚至于特殊的嵌入式场景想,它们都有加速模型推理的需求。   TVM介是从深度学习编译器的角度来做推理引擎,目前技术领域还比较新,具体技术细节以后有机会会深入学习,这里主要想体验一下使用TVM做深度模型推理,重点是推理效率的提升,所以尝试安装下TVM测试下。 相关版本 ```bash gcc版本 6.4.0 cmake 3.16.4 llvm 我选择的版本为llvm-9.0.0 ``` gcc 安装 查看系统版本 cat /etc/redhat-release 查看默认的gcc版本 gcc --version 查看默认动态库 strings /usr/lib64/libstdc++.so.6 | grep GLIBC GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10

rpm重新打包

…衆ロ難τιáo~ 提交于 2020-02-11 06:48:23
rpm重新打包 如需转载请标明出处: http://blog.csdn.net/itas109 QQ技术交流群: 129518033 文章目录 rpm重新打包 @[toc] 前言 1.所需工具 2.解包 2.1 创建打包目录 2.2 提取SPEC文件 2.3 提取rpm文件 3.自定义修改spec文件 4.打包 5.其他 5.1 rpm和deb的转换 相关问题: 1.rpm打包 2.spec打包脚本文件 3.rpm提取spec 4.deb和rpm转化 5.rpm解包 前言 rpm是Red-Hat Package Manager(RPM软件包管理器)的缩写,类似于windows下的msi安装包等。 rpm重新打包的目的主要如下: 安装包不完全符合用途 将源码编译的结果快速生成安装包 1.所需工具 所需主要工具如下: rpm-build (打包) rpmrebuild (解包) 安装: sudo yum install rpm-build rpmrebuild 2.解包 以下以redis-5.0.5-1.fc27.x86_64.rpm进行说明。 2.1 创建打包目录 rpmrebuild -p redis-5.0.5-1.fc27.x86_64.rpm 执行后会在增加 ~/rpmbuild 目录 2.2 提取SPEC文件 rpmrebuild -s redis.spec -p

I get this error: “glibc detected”

会有一股神秘感。 提交于 2020-02-11 06:43:29
问题 I just wrote a piece of CPP code and I compiled it using G++ in ubuntu. When I run my code everything is fine, the code runs well and gives output but doesn't exit and it gives this error: *** glibc detected *** ./a.out: free(): invalid next size (fast): 0x09f931f0 *** ======= Backtrace: ========= /lib/libc.so.6(+0x6c501)[0x3de501] /lib/libc.so.6(+0x6dd70)[0x3dfd70] /lib/libc.so.6(cfree+0x6d)[0x3e2e5d] /usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x6e2441] ./a.out[0x8049ce6] /lib/libc.so.6(+0x2f69e)

I get this error: “glibc detected”

廉价感情. 提交于 2020-02-11 06:42:15
问题 I just wrote a piece of CPP code and I compiled it using G++ in ubuntu. When I run my code everything is fine, the code runs well and gives output but doesn't exit and it gives this error: *** glibc detected *** ./a.out: free(): invalid next size (fast): 0x09f931f0 *** ======= Backtrace: ========= /lib/libc.so.6(+0x6c501)[0x3de501] /lib/libc.so.6(+0x6dd70)[0x3dfd70] /lib/libc.so.6(cfree+0x6d)[0x3e2e5d] /usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x6e2441] ./a.out[0x8049ce6] /lib/libc.so.6(+0x2f69e)

Linux下root用户升级GLIBC版本

你离开我真会死。 提交于 2020-02-06 00:16:53
本文升级的是glibc-2.17 项目程序需要用到GLIBC2.17,如非必要不要轻易升级glibc库,这是linux系统相当重要的库,牵连太多。 下载glibc源码包 具体下载有断网跟联网方式,下载后进行解压 tar –zxvf glibc-2.17.tar.gz 生成Makefile 编译、安装 cd glibc-2.17 mkdir objdir cd objdir ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin //–with-headers=/usr/include 编译过程需要的头文件,如果是内核版本太低会导致编译不成功,就算骗过编译器升级以后的glibc也会不能用,而且是致命的,慎重。 用查看当版本 strings /lib/libc.so.6 | grep GLIBC 补充 若是非root用户升级,需要配置环境量,如果是程序编译需要,安装完以后可以在编译选项中加入所需要的库(/prefix/libc.so.6) 来源: CSDN 作者: 天地无私! 链接: https://blog.csdn.net/weixin_43803635/article/details/104188169