<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[如何编译glibc库]]></title><description><![CDATA[<p dir="auto">如题，如何在工业HMI上编译glibc库</p>
]]></description><link>https://bbs.aw-ol.com/topic/3615/如何编译glibc库</link><generator>RSS for Node</generator><lastBuildDate>Thu, 14 May 2026 07:18:45 GMT</lastBuildDate><atom:link href="https://bbs.aw-ol.com/topic/3615.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 31 May 2023 02:43:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 如何编译glibc库 on Wed, 31 May 2023 02:51:53 GMT]]></title><description><![CDATA[<p dir="auto">遵循以下步骤</p>
<h1>make工具</h1>
<p dir="auto">注意由于AW服务器make版本为3.8.1，在编译glibc高版本时候不兼容，所以需要更新make工具。假如服务器make版本较高，可以不用更新make工具。</p>
<p dir="auto"><img src="/assets/uploads/files/1685501256180-74adce60b8464885a5dd61ee74ba04ce.jpg" alt="74adce60b8464885a5dd61ee74ba04ce.jpg" class=" img-responsive img-markdown" width="812" height="203" /></p>
<p dir="auto">网址 <a href="http://ftp.gnu.org/pub/gnu/make" target="_blank" rel="noopener noreferrer nofollow ugc">http://ftp.gnu.org/pub/gnu/make</a> ，下载最新版本4.3。解压后，对make工具进行安装。进入make-4.3源码目录，执行以下命令。</p>
<pre><code># prefix 后面路径为make工具安装路径,这里我们指定安装到out目录下。
./configure --prefix=${path}
make 
make install
</code></pre>
<p dir="auto"><img src="/assets/uploads/files/1685501268005-9a2c99382e9f410f972896bb8d835d60.jpg" alt="9a2c99382e9f410f972896bb8d835d60.jpg" class=" img-responsive img-markdown" width="1656" height="131" /></p>
<p dir="auto">安装完成，我们看到make 4.3版本</p>
<p dir="auto"><img src="/assets/uploads/files/1685501276377-76462bc8ce8843c18851fb1b53ae6006.jpg" alt="76462bc8ce8843c18851fb1b53ae6006.jpg" class=" img-responsive img-markdown" width="1656" height="133" /></p>
<h1>glibc源码下载</h1>
<p dir="auto">网址 <a href="http://ftp.gnu.org/pub/gnu/glibc/" target="_blank" rel="noopener noreferrer nofollow ugc">http://ftp.gnu.org/pub/gnu/glibc/</a> ，下载所需的glibc版本，注意gcc工具链版本和glibc版本需要匹配。</p>
<p dir="auto">如下图所示是准备好编译脚本env. sh，glibc各个版本源码。</p>
<p dir="auto"><img src="/assets/uploads/files/1685501306671-723697d50e5f4f1cbdb57e159e694c80.jpg" alt="723697d50e5f4f1cbdb57e159e694c80.jpg" class=" img-responsive img-markdown" width="1656" height="204" /></p>
<p dir="auto"><strong>env.sh是把所有编译步骤整合在一起的脚本，可以根据具体情况单独执行每条指令。</strong></p>
<p dir="auto">打开脚本env.sh脚本。第4行是gcc位置，第5行是make工具位置(不需要安装高版本make可以去掉)，第7行是glibc版本，第12行是glibc源码路径，第13行是glibc生成库文件路径，第14行是glibc编译过程产生中间文件存放路径，第16行是修改环境变量，使用我们自己的make和gcc工具。第30-33行，用于编译glibc。</p>
<p dir="auto"><img src="/assets/uploads/files/1685501324428-8b1ebd6d70be4655a7605128bee7fec2.jpg" alt="8b1ebd6d70be4655a7605128bee7fec2.jpg" class=" img-responsive img-markdown" width="1656" height="898" /></p>
<p dir="auto">其中31行 --host=arm-none-linux-gnueabihf ，host填入值要和gcc匹配 ，否则会出差。</p>
<p dir="auto"><img src="/assets/uploads/files/1685501376742-5f2a16b347c3456080fa730db1f7da2d.jpg" alt="5f2a16b347c3456080fa730db1f7da2d.jpg" class=" img-responsive img-markdown" width="1656" height="898" /></p>
<p dir="auto"><img src="/assets/uploads/files/1685501381193-03eea564b5674b67a048d0ee1cd5bee7.jpg" alt="03eea564b5674b67a048d0ee1cd5bee7.jpg" class=" img-responsive img-markdown" width="1656" height="229" /></p>
<p dir="auto">运行env.sh脚本</p>
<p dir="auto"><a href="/assets/uploads/files/1685501395660-env.sh">env.sh</a></p>
<pre><code>./env.sh
</code></pre>
<p dir="auto">注意下信息，我们可以看到glibc生成准备环境时候，已经使用了我们指定gcc工具链，make工具。</p>
<p dir="auto"><img src="/assets/uploads/files/1685501407641-98a88fec90ff4c018cf4421fae808ac2.jpg" alt="98a88fec90ff4c018cf4421fae808ac2.jpg" class=" img-responsive img-markdown" width="1656" height="898" /></p>
<p dir="auto"><img src="/assets/uploads/files/1685501407596-b994e54444474d3997fb351db376c330.jpg" alt="b994e54444474d3997fb351db376c330.jpg" class=" img-responsive img-markdown" width="1656" height="898" /></p>
<p dir="auto">编译完成后，我们看到对应so库</p>
<p dir="auto"><img src="/assets/uploads/files/1685501505744-7d8beda4939c4dcb94d694b343f93d5e.jpg" alt="7d8beda4939c4dcb94d694b343f93d5e.jpg" class=" img-responsive img-markdown" width="1656" height="898" /></p>
<p dir="auto">替换glibc，例如在我们测试demo，修改Makefile，指定到我们glibc版本路径即可</p>
<p dir="auto">重新编译，查看对应执行文件，看到已经使用对应版本版本glibc库</p>
<pre><code>strings main | grep glibc
</code></pre>
<p dir="auto"><img src="/assets/uploads/files/1685501502110-4e72c23a5e7646189ca264b87f0ef8b4.jpg" alt="4e72c23a5e7646189ca264b87f0ef8b4.jpg" class=" img-responsive img-markdown" width="1656" height="871" /></p>
<h1>版本匹配问题</h1>
<p dir="auto">1、gcc-linaro-5.3.1-2016.05-x86_64_arm-linux-gnueabi版本，glibc 2.29以下版本都可以编译通过</p>
<p dir="auto">2、gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf版本，目前只在glibc 2.33编译通过，其他版本需测试。</p>
]]></description><link>https://bbs.aw-ol.com/post/16113</link><guid isPermaLink="true">https://bbs.aw-ol.com/post/16113</guid><dc:creator><![CDATA[livpo]]></dc:creator><pubDate>Wed, 31 May 2023 02:51:53 GMT</pubDate></item></channel></rss>