<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://200yi.com/ff_internal/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://200yi.com/ff_internal/feed.php">
        <title>FAIRYFAR-INTERNAL wiki:Coding:编译</title>
        <description></description>
        <link>http://200yi.com/ff_internal/</link>
        <image rdf:resource="http://200yi.com/ff_internal/lib/tpl/mnml-blog/images/favicon.ico" />
       <dc:date>2026-04-26T07:36:29+0800</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:CentOS%207%20%E5%8D%87%E7%BA%A7gcc%E8%87%B39.3&amp;rev=1687008318&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:GCC%20Documentation&amp;rev=1687008318&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:Linux%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%87%E7%BA%A7ninja&amp;rev=1687008318&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:RedHat%206.5%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85gcc%204.8.2&amp;rev=1687008318&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:gcc%E7%BC%96%E8%AF%91%E5%AE%8F%E5%B1%95%E5%BC%80%E8%A7%82%E5%AF%9F&amp;rev=1687008318&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:gcc%E7%BC%96%E8%AF%91%E4%BC%98%E5%8C%96%E5%8F%82%E6%95%B0&amp;rev=1687008318&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:gcc%E4%B8%8D%E6%94%AF%E6%8C%81%E5%B9%B6%E8%A1%8Clink&amp;rev=1687008318&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:%E4%BB%8E%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91glibc%202.18&amp;rev=1725296405&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:%E6%89%93%E9%80%A0%E5%8F%B2%E4%B8%8A%E6%9C%80%E5%B0%8F%E5%8F%AF%E6%89%A7%E8%A1%8CELF%E6%96%87%E4%BB%B6%2845%E5%AD%97%E8%8A%82%29&amp;rev=1687008318&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:%E5%BC%BA%E5%88%B6%E5%87%BD%E6%95%B0%E4%B8%8D%E8%A2%ABinline&amp;rev=1687008318&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:%E5%BC%BA%E5%88%B6%E5%87%BD%E6%95%B0%E5%86%85%E8%81%94inline&amp;rev=1687008318&amp;do=diff"/>
                <rdf:li rdf:resource="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:%E5%8C%BA%E5%88%86Linux%E7%A8%8B%E5%BA%8F%E6%98%AF%E5%90%A6%E4%B8%BADebug%E7%89%88%E6%9C%AC&amp;rev=1687008318&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://200yi.com/ff_internal/lib/tpl/mnml-blog/images/favicon.ico">
        <title>FAIRYFAR-INTERNAL</title>
        <link>http://200yi.com/ff_internal/</link>
        <url>http://200yi.com/ff_internal/lib/tpl/mnml-blog/images/favicon.ico</url>
    </image>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:CentOS%207%20%E5%8D%87%E7%BA%A7gcc%E8%87%B39.3&amp;rev=1687008318&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:18+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Coding:编译:CentOS 7 升级gcc至9.3</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:CentOS%207%20%E5%8D%87%E7%BA%A7gcc%E8%87%B39.3&amp;rev=1687008318&amp;do=diff</link>
        <description>升级

查看当前gcc版本号：


[gpadmin@bogon ~]$ gcc --version
gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39)
Copyright © 2015 Free Software Foundation, Inc.


升级到gcc 9.3：


[gpadmin@bogon ~]$ sudo yum -y install centos-release-scl
[gpadmin@bogon ~]$ sudo yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
[gpadmin@bogon ~]$ scl enable devtoolset-9 bash</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:GCC%20Documentation&amp;rev=1687008318&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:18+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Coding:编译:GCC Documentation</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:GCC%20Documentation&amp;rev=1687008318&amp;do=diff</link>
        <description>点击下载阅读：[下载]



	* Using the GNU Compiler Collection (GCC)</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:Linux%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%87%E7%BA%A7ninja&amp;rev=1687008318&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:18+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Coding:编译:Linux安装与升级ninja</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:Linux%E5%AE%89%E8%A3%85%E4%B8%8E%E5%8D%87%E7%BA%A7ninja&amp;rev=1687008318&amp;do=diff</link>
        <description>安装ninja


[clickhouse@bogon build]$ sudo yum install ninja-build.x86_64
[clickhouse@bogon build]$ ninja --version
1.7.2


默认安装的ninja版本可能无法满足要求，此时建议手动升级ninja到需要的版本。

升级方法

从 https://github.com/ninja-build/ninja/releases，下载高版本ninja的二进制版本（ninja-linux.zip），解压后直接覆盖原有文件即可：</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:RedHat%206.5%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85gcc%204.8.2&amp;rev=1687008318&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:18+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Coding:编译:RedHat 6.5编译安装gcc 4.8.2</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:RedHat%206.5%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85gcc%204.8.2&amp;rev=1687008318&amp;do=diff</link>
        <description>操作系统：RedHat 6.5
原始GCC：gcc 4.4.7

步骤：

1. 准备

gcc-4.8.2.tar.gz，解压到gcc-4.8.2目录。

2. 如果可以互联网的话，直接执行


./contrib/download_prerequisites


下载依赖包。

如果不能联网，在实现将以下文件放入gcc-4.8.2目录下：</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:gcc%E7%BC%96%E8%AF%91%E5%AE%8F%E5%B1%95%E5%BC%80%E8%A7%82%E5%AF%9F&amp;rev=1687008318&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:18+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Coding:编译:gcc编译宏展开观察</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:gcc%E7%BC%96%E8%AF%91%E5%AE%8F%E5%B1%95%E5%BC%80%E8%A7%82%E5%AF%9F&amp;rev=1687008318&amp;do=diff</link>
        <description>复杂宏编译期展开后是什么样的？当编译宏报错时，如何差错？

例子

编译一个修改后PostgreSQL源码，elog宏原型为：


#define elog(elevel, ...)  \
	do { \
		pg_prevent_errno_in_scope(); \
		elog_start(__FILE__, __LINE__, PG_FUNCNAME_MACRO); \
		elog_finish(elevel, __VA_ARGS__); \
		if (__builtin_constant_p(elevel) &amp;&amp; (elevel) &gt;= ERROR) \
			pg_unreachable(); \
	} while(0)

_</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:gcc%E7%BC%96%E8%AF%91%E4%BC%98%E5%8C%96%E5%8F%82%E6%95%B0&amp;rev=1687008318&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:18+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Coding:编译:gcc编译优化参数</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:gcc%E7%BC%96%E8%AF%91%E4%BC%98%E5%8C%96%E5%8F%82%E6%95%B0&amp;rev=1687008318&amp;do=diff</link>
        <description>转自：https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html

3.11 Options That Control Optimization

These options control various sorts of optimizations.

Without any optimization option, the compiler’s goal is to reduce the cost of compilation and to make debugging produce the expected results. Statements are independent: if you stop the program with a breakpoint between statements, you can then assign a new value to any variable or change the program counter to any other statement in the func…</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:gcc%E4%B8%8D%E6%94%AF%E6%8C%81%E5%B9%B6%E8%A1%8Clink&amp;rev=1687008318&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:18+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Coding:编译:gcc不支持并行link</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:gcc%E4%B8%8D%E6%94%AF%E6%8C%81%E5%B9%B6%E8%A1%8Clink&amp;rev=1687008318&amp;do=diff</link>
        <description>对于大型项目，gcc编译（compile）可以使用 -j 参数执行编译并行度，在多核CPU系统中，可以充分利用CPU资源，加快编译速度。但是，gcc链接（link）不支持并行，仍然使用单核链接，对于大型项目，效率太低。可以尝试以下编译工具，将链接过程并行化。</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:%E4%BB%8E%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91glibc%202.18&amp;rev=1725296405&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-09-03T01:00:05+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Coding:编译:从源码编译glibc 2.18</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:%E4%BB%8E%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91glibc%202.18&amp;rev=1725296405&amp;do=diff</link>
        <description>环境：

x86_64位，Redhat 7.4。

正文

按照 [参考文献1] 的过程，我在64位x86机器上编译glibc 2.18，在第4步configure阶段报以下错误：



checking for .preinit_array/.init_array/.fini_array support... no
configure: error: Need linker with .init_array/.fini_array support.</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:%E6%89%93%E9%80%A0%E5%8F%B2%E4%B8%8A%E6%9C%80%E5%B0%8F%E5%8F%AF%E6%89%A7%E8%A1%8CELF%E6%96%87%E4%BB%B6%2845%E5%AD%97%E8%8A%82%29&amp;rev=1687008318&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:18+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Coding:编译:打造史上最小可执行ELF文件(45字节)</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:%E6%89%93%E9%80%A0%E5%8F%B2%E4%B8%8A%E6%9C%80%E5%B0%8F%E5%8F%AF%E6%89%A7%E8%A1%8CELF%E6%96%87%E4%BB%B6%2845%E5%AD%97%E8%8A%82%29&amp;rev=1687008318&amp;do=diff</link>
        <description>转自：https://www.w3cschool.cn/cbook/7to1eozt.html

前言

本文从减少可执行文件大小的角度分析了 ELF 文件，期间通过经典的 Hello World 实例逐步演示如何通过各种常用工具来分析 ELF 文件，并逐步精简代码。

为了能够尽量减少可执行文件的大小，我们必须了解可执行文件的格式，以及链接生成可执行文件时的后台细节（即最终到底有哪些内容被链接到了目标代码中）。通过选择合适的可执行文件格式并剔除对可执行文件的最终运行没有影响的内容，就可以实现目标代码的裁减。因此，通过探索减少可执行文件大小的方法，就相当于实践性地去探索了可执行文件的格式以及链接过程的细节。…</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:%E5%BC%BA%E5%88%B6%E5%87%BD%E6%95%B0%E4%B8%8D%E8%A2%ABinline&amp;rev=1687008318&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:18+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Coding:编译:强制函数不被inline</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:%E5%BC%BA%E5%88%B6%E5%87%BD%E6%95%B0%E4%B8%8D%E8%A2%ABinline&amp;rev=1687008318&amp;do=diff</link>
        <description>GCC编译代码时，会自动判断函数是否可以被inline。指定为“inline”的函数，可能被inline，也可能不被inline；没有指定“inline”的函数，也有可能被inline。

但是，有时出于特殊需要，我们希望某个函数强制不得被inline。例如，直接操作寄存器的汇编函数等。</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:%E5%BC%BA%E5%88%B6%E5%87%BD%E6%95%B0%E5%86%85%E8%81%94inline&amp;rev=1687008318&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:18+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Coding:编译:强制函数内联inline</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:%E5%BC%BA%E5%88%B6%E5%87%BD%E6%95%B0%E5%86%85%E8%81%94inline&amp;rev=1687008318&amp;do=diff</link>
        <description>转自：https://www.jianshu.com/p/8546f48a4a7b

正文

在YYModel中发现如下的一个宏。


#define force_inline __inline__ __attribute__((always_inline))


__inline__ __attribute__((always_inline))的意思是强制内联。所有加 __inline__ __attribute__((always_inline))修饰的函数在被调用的时候不会被编译成函数调用，而是直接扩展到调用函数体内。</description>
    </item>
    <item rdf:about="http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:%E5%8C%BA%E5%88%86Linux%E7%A8%8B%E5%BA%8F%E6%98%AF%E5%90%A6%E4%B8%BADebug%E7%89%88%E6%9C%AC&amp;rev=1687008318&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-06-17T21:25:18+0800</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>wiki:Coding:编译:区分Linux程序是否为Debug版本</title>
        <link>http://200yi.com/ff_internal/wiki.php?id=wiki:Coding:%E7%BC%96%E8%AF%91:%E5%8C%BA%E5%88%86Linux%E7%A8%8B%E5%BA%8F%E6%98%AF%E5%90%A6%E4%B8%BADebug%E7%89%88%E6%9C%AC&amp;rev=1687008318&amp;do=diff</link>
        <description>正文

如何判断一个.so是否是debug编译的？

如果用此方法：用file来查看一个.so, 根据是否包含”not stripped”来判断该.so是否是debug编译的。然而stripped/not stripped并不是debug/release编译的判断标准. 对debug和release的.so运行file后可得出几乎相同的输出, 都是not stripped。所以此方法是不准确的。</description>
    </item>
</rdf:RDF>
