编译
文章平均质量分 53
u012903992
这个作者很懒,什么都没留下…
展开
-
ELF文件格式解析
通过以上的定义以及示例讲解,相信大家已经对ELF的文件格式有所了解了,如果想要继续深挖ELF文件的细节,大家可以参考以下这些资料。转载 2023-12-29 09:08:24 · 613 阅读 · 0 评论 -
LIBRARY_PATH和LD_LIBRARY_PATH区别
在您的问题中,由于出现了"cannot find -lxml2"的错误,涉及到编译阶段需要找到libxml2库文件。因此,您需要设置LIBRARY_PATH环境变量来指定编译器在链接时搜索库文件的路径。LIBRARY_PATH影响编译器在链接阶段搜索库文件的路径,而LD_LIBRARY_PATH影响程序运行时加载共享库的路径。两者分别在编译和运行时期起作用。LIBRARY_PATH和LD_LIBRARY_PATH都是用于指定动态链接库的搜索路径的环境变量,但在不同的情况下有不同的作用。原创 2023-12-21 15:25:25 · 641 阅读 · 0 评论 -
CFLAGS、CXXFLAGS、FFLAGS、FCFLAGS、LDFLAGS、LD_LIBRARY_PATH区别
这些环境变量可以用于在编译和链接过程中灵活地传递参数和选项,并对编译器和链接器的行为进行个性化的配置和定制。示例:将优化级别设置为最高,启用所有警告信息,并指定目标体系结构为x86-64。示例:将C++标准版本设置为C++11,并启用所有警告信息。示例:指定搜索动态链接库的路径,并链接额外的库文件。示例:将优化级别设置为最高,并启用额外的调试信息。:用于设置Fortran编译器的特定编译选项。:用于设置Fortran编译器的编译选项。:用于设置C++编译器的编译选项。:用于设置C编译器的编译选项。原创 2023-12-07 20:05:03 · 1283 阅读 · 0 评论 -
AddressSanitizer和LeakSanitizer有什么区别
ASan主要用于检测内存错误,如越界访问和释放后,而LSan主用于检测内存泄漏问题。它们都能够在编译时插入额外的运行时检查代码,帮助开发者发现修复内存相关问题。AddressSanitizer(ASan)和LeakSanitizer(LSan)都是用于内存错误检测的工具,它们的主要区别在于检测的问题类型和应用场景。原创 2023-12-07 19:51:36 · 772 阅读 · 0 评论 -
Program terminated with signal SIGQUIT, Quit.
当程序接收到SIGQUIT信号时,它会终止执行并生成核心转储文件,该文件可以用于后续调试。SIGQUIT信号通常用于应对程序的异常情况,比如程序出现严重错误或不响应时,用户可以发送SIGQUIT信号来终止程序并获取有关程序状态的核心转储信息。SIGINT信号是用于请求程序终止的中断信号,而SIGQUIT信号通常用于在程序出现问题时获取核心转储信息。信号SIGQUIT是由用户发送的信号,通常用于请求程序终止并生成核心转储(core dump)。原创 2023-06-01 20:44:48 · 344 阅读 · 0 评论 -
python3中的宏HAVE_VFORK
宏的地方可能因不同的 Python 版本和代码库而有所不同,它通常用于处理与进程相关的操作或优化,以适应不同的操作系统环境和系统调用的差异。宏通常用于条件编译,根据系统支持情况启用或禁用特定的代码段。在创建子进程时会共享父进程的内存空间,而不会复制整个父进程的内存。的系统调用,用于创建一个新进程作为当前进程的子进程,但与。,可以使用动态链接库或系统调用的方式。在编译软件时,可以通过检查预定义的宏来确定系统是否支持。系统调用,可以通过编译时的配置或在运行时进行判断。函数的地址,如果返回的地址不为。原创 2023-05-27 11:48:06 · 750 阅读 · 0 评论 -
configure: error: readelf for the host is required for cross builds
具体方法可以参考主机所使用的操作系统和交叉编译工具链的文档。例如,在 Ubuntu 系统上,可以通过以下命令安装。这个错误通常出现在进行交叉编译时,即使用一台计算机(主机)来编译运行在另一台不同架构的计算机(目标)上的程序时。在交叉编译时,需要使用主机上的交叉编译工具链中的。工具,以便在编译过程中解析目标架构的 ELF 格式文件。在其他系统上,可能需要使用不同的包管理器或者手动编译安装。软件包,或者安装的版本过旧,不兼容当前交叉编译工具链。工具是用于查看 ELF 格式文件的工具,包含在。原创 2023-05-16 20:15:47 · 842 阅读 · 0 评论 -
用automake制作makefile带静态库和动态库的
原文:https://www.oschina.net/question/143474_387021. 目录结构如下:example|——src 目录(存放源代码文件) |——hello.c|——lib 目录(存放用来生成库的文件) |——test.c 用来生成静态库libhello.a|——include 目录(存放程序中使用的头文件) |——hello.h2. 编写的各个目录下的源文件hello.h 文件extern void pr...转载 2020-10-12 16:05:49 · 563 阅读 · 0 评论 -
configure配置文件
m4是一种宏处理器,它是 POSIX 标准的一部分。为什么叫m4呢,全称是macro,m后面有4个字母,据说是这样的。摘录一段对于m4的描述:从图灵的角度来看 m4,输入流与输出流可以衔接起来构成一条无限延伸的纸带,m4 是这条纸带的读写头,所以 m4 是一种图灵机。autoconf会生成configure文件,configure是一个脚本,它能设置源程序来适应各种不同的操作系统平台,并且根据不同的系统来产生合适的Makefile,从而可以使你的源代码能在不同的操作系统平台上被编译出来。转载 2023-02-17 09:38:45 · 399 阅读 · 0 评论 -
使用GCC的PGO(Profile-guided Optimization)优化整个系统
启发来自于巨硬在自家服务器上做的实验,废话不多直接上图微软的方法微软的方法可以看到使用PGO优化的内核还是有一些性能提升的零、前提想要使用PGO编译优化,你的gcc编译器需要开启支持pgo特性,gentoo系统如下一、内核kernel的优化然后在新内核下运行系统一段时间,打开各种软件如浏览器、mpv播放器、cmus、办公、编译软件、下载、游戏、steam等等(即将日常用系统的各个软件和场景全部跑一遍),以让内核收集足够全面的profile数据(gcov数据)#注:开启了CONFIG_DEBUG_转载 2022-06-11 15:37:19 · 3250 阅读 · 2 评论 -
性能优化之编译优化
本文主要分享总结一下工作过程中用到有关于编译优化方面的性能优化手段。1.反馈式编译PGO本文使用冒泡排序作为例子来介绍PGO的使用,冒泡排序代码如下:编译时使用-fprofile-generate,运行程序进行训练,生成profile(.gcda文件) 注:通常是在接近真实生产运行环境中进行训练,达到一定训练时间后,需要手动调用call (void)__gcov_flush()函数,否则不会生成.gcda文件(正常需要程序终止才能生成)。使用profile(*.gcda文件)进行再次编译-fpr转载 2022-06-11 15:17:14 · 1745 阅读 · 1 评论 -
反馈式编译
PGO,即Profile-Guided Optimizations,反馈式优化。PGO是编译器的又一优化技术,PGO与其它的一些优化技术/选项有一个明显的区别是:PGO优化是分三步完成的,是一个动态的优化过程。反馈优化过程:以下优化受益于反馈数据:寄存器分配,基本块重排,内联,循环展开,指令调度,冗余指令删除等。说明:代码变更时,反馈数据需要重新生成。编译获得插桩版本二进制或者so上板运行获取gcda反馈式编译数据根据反馈式数据重新编译二、 FGOPGO是gcc原生的反馈编译优化转载 2022-06-11 15:14:56 · 815 阅读 · 0 评论