- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
引出问题的基本步骤:
cd linux-2.6.35.9/
make ARCH=x86 INSTALL_HDR_PATH=${PREFIX}/${TARGET} headers_install
cd ../
cd build-binutils/
sh ../binutils-2.28/configure --prefix=${PREFIX} --target=${TARGET}
make
make install
cd ../
cd build-gcc/
sh ../gcc-4.9.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c,c++ --disable-multilib
make all-gcc
make install-gcc
cd ../
我遇到的问题是最终安装到 ${PREFIX}/lib/gcc/${TARGET}/4.9.4/include-fixed/limits.h 中的内容似乎不正确.具体来说,构建和安装 GCC 时的“fixincludes”位需要一些名为“sys-include”的目录,但如果没有,上述 limits.h 不会引用相关的 syslimits.h(在同一目录)。
如果我查看构建/安装序列的输出,会看到从组件 limitx.h、limity.h 和其他一些位构建此文件的引用。这个测试失败了,它只是安装了 GCC 附带的“通用”limits.h(不包括对 syslimits.h 的引用,它使用 GCC 的#include_next 指令来包含 ${PREFIX}/${TARGET}/include/limits.h 里面有实际的东西我需要像 NAME_MAX 和 PATH_MAX)。
文件中缺少的位是:
/* This administrivia gets added to the beginning of limits.h
if the system has its own version of limits.h. */
/* We use _GCC_LIMITS_H_ because we want this not to match
any macros that the system's limits.h uses for its own purposes. */
#ifndef _GCC_LIMITS_H_ /* Terminated in limity.h. */
#define _GCC_LIMITS_H_
#ifndef _LIBC_LIMITS_H_
/* Use "..." so that we find syslimits.h only in this same directory. */
#include "syslimits.h"
#endif
那么是否有一个选项我没有传递给 GCC 的配置脚本,或者我没有传递给可以正确创建 sys-include 目录的这一步之前的东西?
[编辑]
TARGET=i686-redhat-linux
(我们用于项目的构建服务器上的“gcc -dumpmachine”的目标三元组)
可能更有帮助的信息(?):这些包只是从各自的文件中“wget”拉取的。我正在构建一个最新的 Ubuntu 16.04 安装,我在其中安装了 libgmp-dev 和 libmpfr-dev 以避免必须使用编译器源代码编译它们。
最佳答案
经过更多的挖掘和反复试验,我匹配了一些我从 How to Build a GCC Cross-Compiler 开始的东西以及有关用于配置 GCC 的显然已弃用的选项 --with-headers
的信息。 (--with-headers=${PREFIX}/${TARGET}/include/linux
) 这行得通,但是当我构建编译器支持库时,它提示缺少 bits/stdio_lim.h
。我找到了另一个帖子 here谈到了这个问题(你必须在线程中稍微上升一点)并且提到了我提到的第一页中令人感动的 gnu/stubs.h
东西。
根据我自己在下面的评论添加,注意您必须删除在 make install-gcc 之后构建的
步骤,否则您的普通 C header 将与默认包含在搜索路径中的特定于 Linux 内核的 header 发生冲突。${PREFIX}/${TARGET}/sys-include
目录
我只想说,在对我使用的旧 Glibc (2.11.3) 应用补丁后,整个序列最终如下所示:
export TARGET=i686-redhat-linux
export PREFIX=$(pwd)/output
export PATH=${PATH}:${PREFIX}/bin
mkdir build-binutils
mkdir build-gcc
mkdir build-glibc
cd linux-2.6.35.9/
make ARCH=x86 INSTALL_HDR_PATH=${PREFIX}/${TARGET} headers_install
cd ../
cd build-binutils/
sh ../binutils-2.28/configure --prefix=${PREFIX} --target=${TARGET}
make
make install
cd ../
cd build-gcc/
sh ../gcc-4.9.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c,c++ --disable-multilib --with-headers=${PREFIX}/${TARGET}/include/linux
make all-gcc
make install-gcc
cd ../
rm --recursive --force ${PREFIX}/${TARGET}/sys-include
cd build-glibc/
sh ../glibc-2.11.3/configure --prefix=${PREFIX}/${TARGET} --build=$(gcc -dumpmachine) --host=${TARGET} --target=${TARGET} --disable-multilib libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes
make install-bootstrap-headers=yes install-headers
make csu/subdir_lib
install csu/crt1.o csu/crti.o csu/crtn.o ${PREFIX}/${TARGET}/lib
${TARGET}-gcc -nostdlib -nostartfiles -shared -x c /dev/null -o ${PREFIX}/${TARGET}/lib/libc.so
touch ${PREFIX}/${TARGET}/include/gnu/stubs.h ${PREFIX}/${TARGET}/include/bits/stdio_lim.h
cd ../
cd build-gcc/
make all-target-libgcc
make install-target-libgcc
cd ../
cd build-glibc/
make
make install
cd ../
我没有看到任何真正深入到这个深度的页面(也许 Preshing on Programming 页面实际上并不完全正确?)但我将测试此配置并确保软件完全针对目标构建而无需问题。 (我确实在文件中的 limits.h 中测试了 NAME_MAX,它似乎工作得很好而且很漂亮。)
我也不知道我是否需要放入 --disable-multilib
东西,但这似乎是其他页面正在做的事情。 GCC 邮件列表中的链讨论了使用 --with-newlib
或 --disable-shared
作为选项,但线程中的人不同意其中任何一个是正确的解决方案。
如果有人对此有更好的洞察力,我肯定会感激一个不那么骇人听闻、更正式的问题解决方案。
如果有人想知道,修复 Glibc 2.11.3 的补丁(有两个)是配置脚本与 GNU Make 4+ 一起工作的自定义修复:
sed -i 's/\(3.79\)/4.* | \1/' glibc-2.11.3/configure
...以及库中两个文件的实际补丁以修复 i686 支持:
patch glibc-2.11.3/nptl/sysdeps/pthread/pt-initfini.c <<__EOF__
@@ -45,6 +45,11 @@
/* Embed an #include to pull in the alignment and .end directives. */
asm ("\n#include \"defs.h\"");
+asm ("\n#if defined __i686 && defined __ASSEMBLER__");
+asm ("\n#undef __i686");
+asm ("\n#define __i686 __i686");
+asm ("\n#endif");
+
/* The initial common code ends here. */
asm ("\n/*@HEADER_ENDS*/");
__EOF__
patch glibc-2.11.3/sysdeps/unix/sysv/linux/i386/sysdep.h <<__EOF__
@@ -29,6 +29,10 @@
#include <dl-sysdep.h>
#include <tls.h>
+#if defined __i686 && defined __ASSEMBLER__
+#undef __i686
+#define __i686 __i686
+#endif
/* For Linux we can use the system call table in the header file
/usr/include/asm/unistd.h
__EOF__
我从 here 得到了最后一个补丁.
关于GCC 4.9.4 交叉编译器构建(limits.h 问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44419593/
好吧,我对我的页面发生的事情有点困惑。我在底部有页码, table 上摆满了 23 种不同的元素。 每个页面应一次显示 5 个项目。我显示的页面发送了一个带有 pagenumber = 不管怎样的 g
几周前我开始学习 Ada。我知道 limited 在某些情况下声明了一个有限类型,不允许复制对象 来自 Ada Reference Manual 2012 7.5 1/2 A limited type
我想按 DESC 选择日期并限制为最后 3 个,然后我需要基本上翻转最后 3 个结果,以便它们按 ASC 排序 任何帮助将不胜感激,我正在使用 postgresql 最佳答案 SELECT * FRO
SELECT * FROM mm_tfs WHERE product_slug LIKE '%football%' AND schoolid = '8' AND category_id ='2
SELECT * FROM mm_tfs WHERE product_slug LIKE '%football%' AND schoolid = '8' AND category_id ='2
我正在尝试访问按“日期”键排序的表中恒定数量的最新文档。请注意,不幸的是,日期是被实现的(不是由我......),使得该值设置为字符串,例如“2014-01-14”,或者有时“2014-01-14 2
我目前正在使用具有限制 cpu、限制内存以及保留 cpu 和内存的 Docker Swarm。 完成测试后,我想删除这些配置。我找不到任何有关如何删除这些的文章。 是否有办法通过更新来删除这些设置而不
我目前正在使用具有限制 cpu、限制内存以及保留 cpu 和内存的 Docker Swarm。 完成测试后,我想删除这些配置。我找不到任何有关如何删除这些的文章。 是否有办法通过更新来删除这些设置而不
我必须对我的数据应用分页。我通过复杂的连接查询获取数据,没有任何子查询,只有简单的连接。 假设这个查询[这是一个非常简单的查询,我有一个比这个复杂的查询] SELECT states.state
我经常制作条形图,并将条形图的值额外包含为注释 (geom_text)。通常,我更喜欢这些值右对齐(与将标签放在条形顶部相反)。在绘制多面条形图时,我将这些值放在每个组中的最大值(我之前计算过)加上我
delivery-limit 和 x-delivery-limit 有什么区别? 当我将 x-delivery-limit 设置为 RabbitMQ 队列参数时,我可以看到它限制了我的消息重新排队尝试
delivery-limit 和 x-delivery-limit 有什么区别? 当我将 x-delivery-limit 设置为 RabbitMQ 队列参数时,我可以看到它限制了我的消息重新排队尝试
我正在使用 PostgreSQL 9.3。这应该在具有 100,000 多行的任何表上重现。 EXPLAIN ANALYZE 显示使用 LIMIT 2 扫描了更多行,但我不明白为什么。 限制 1: E
我正在尝试找出是否可以在 PHP 中全局设置和取消设置 MySQL 结果的默认限制。 一些可能看起来像的伪代码: $pdo->prepare('SELECT * FROM example'); $pd
我有下面的代码片段表 在这里我必须对投票前 3 个值求和。 假设 product_id 3030 vote 列的总和为 8.1 和 3671 总和 是 5.2 在这里,我必须获得前 3 个 produ
我正在使用全文搜索来提取行。 我根据分数 (ORDER BY SCORE) 对行进行排序,然后在前 20 行 (LIMIT 20) 中,我想对结果集进行兰德 (RAND)。 因此,对于任何特定的搜索词
帮助创建搜索条件 SELECT * FROM mlt_adr_city WHERE name LIKE "Text%" AND region_id = 59 AND id <> 0 IF (name
MySQL 查询示例: SELECT message_id, message_text FROM messages LIMIT 0 , 30 我得到的这个提示是错误的: HIN
我注意到如果我将查询限制为 1 个而不是 5 个,速度会急剧下降。 SELECT he. * FROM homematic_events he WHERE he.homematic_devices_i
我需要从我的表中获取最后一个 ID,以便我可以在另一个函数中使用它我在我的存储库中创建了这个函数,但我没有工作,它显示了一个错误: [Syntax Error] line 0, col 60: Err
我是一名优秀的程序员,十分优秀!