问题标签 [cross-compiling]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
2158 浏览

debugging - 如何进行库的源代码级调试

我有以下设置。尽管我的工作设置在 Windows 主机上处理 ARM 编译器 Real View Developer Suite (RVDS) 3.2,但对于任何主机上的任何其他 C 编译器来说,这种情况都是通用的。

我在 Windows 主机上使用 RVDS 3.2 编译器工具链构建了 C 代码的 ARM 库(静态库 - .a 文件)。然后,我将这个库与使用 Linux 主机上的 ARM-Linux 编译器工具链的应用程序链接,以获得 ARM 可执行文件。现在,当我尝试使用 gdb 在 Linux 上调试此生成的 ARM 可执行文件时,尝试在链接的库中存在的某个函数中放置断点,gdb 无法在此处放置断点,因为找不到源。所以我手动复制了所有用于在可执行文件所在的 Linux 文件夹中创建库的源文件 (*.c)。gdb 仍然无法设置断点。所以现在我开始思考:

  1. 如何通过在 gdb 中启动通过将此库链接到应用程序而生成的可执行文件,使用不同的编译器链在 Windows 上创建该库的源代码级调试。可能吗?我该怎么做?RVDS 编译器工具链中是否有任何编译器选项可启用此库源代码级调试?

  2. 我是否需要将源文件复制到 linux 中与这些源文件在 windows 中完全相同的文件夹结构中?

0 投票
3 回答
412 浏览

opengl - 寻找 Linux/Windows 可部署的 OpenGL 窗口和操作系统库

我想在 Linux 中建立一个 OpenGL 开发环境,我也可以为 Windows 交叉编译。看起来 GLFW + OpenGL 会给我我需要的东西。

我尝试为 Ubuntu 8.10 安装 GLFW 开发包,但我遇到了依赖问题。不过,我可能会坚持下去。

有人在 Linux 上使用过 GLFW 吗?有没有人尝试过 Windows 的交叉编译?是否有另一种使用 OpenGL 处理窗口可能更好的解决方案?

0 投票
2 回答
832 浏览

c - 在为定制平台构建 newlib 时指示 libgloss 机器

我正在为没有操作系统的定制 PowerPC 平台编译 newlib。在网上阅读信息我意识到我需要在<newplatform>libgloss 的子目录中实现存根函数。

我的困惑是当我编译 newlib 时将如何处理它。--target它是配置例如参数的最后一部分powerpc-ibm-<newplatform>吗?

如果是这种情况,那么我想我应该--target在编译 binutils 和 gcc 时使用相同的?

谢谢

0 投票
3 回答
33981 浏览

linux - 如何从共享库中导出符号

我使用 Windows 主机上的 RVDS 编译器使用目标代码文件(C 源代码)创建了一个共享库 ( *.so) 。*.o

我将此共享对象与一个应用程序(gcc用于 Linux 主机上的 ARM 目标)链接并获得一个可执行文件,该可执行文件在运行时会产生分段错误。(我知道我必须调试它!)

如果我创建一个具有相同源文件的静态库,而不是创建共享库,然后与应用程序链接,然后执行应用程序,它可以按预期正常工作。

所以我的问题是:

  1. 我是否需要使用某些结构在我的源文件中显式导出符号(导出到应用程序的函数)或任何其他符号,以便在与应用程序链接时正常工作?需要什么,我该怎么做?

  2. 共享库是如何工作的?即,函数将被加载和运行的地址,将在创建库时在库中给出。应用程序(main())如何解析要执行库函数的地址?

  3. 静态库是如何工作的,即在静态库的情况下,这个地址规范和解析是如何发生的?

0 投票
2 回答
247 浏览

ide - 多个IDE项目文件

我们目前在一个同时使用 Visual Studio 和 Code::Blocks 的团队中工作,有没有办法在这些项目文件之间复制更改?那么如果一个人向项目文件中添加一个文件,它也会在另一个 IDE 的项目文件中得到调整?

请注意:我们希望我们的项目能够在多个 IDE、平台和编译器上运行。因此,也欢迎通用解决方案。

0 投票
6 回答
2012 浏览

linux - 遗留 gcc 编译器问题

我们正在使用基于 gcc 2.6.0 的旧版编译器来交叉编译我们仍在使用的旧嵌入式处理器(是的,它自 1994 年以来仍在使用!)。为这个芯片做 gcc 端口的工程师早就离开了。虽然我们可能能够从网络上的某个地方恢复 gcc 2.6.0 源,但该芯片的更改集已经在公司历史的大厅中消失了。直到最近,我们一直在糊涂,因为编译器仍在运行并生成可运行的可执行文件,但从 linux 内核 2.6.25(以及 2.6.26)开始,它会失败并显示消息gcc: virtual memory exhausted... 即使在没有参数或仅使用-v. 我已经使用 2.6.24 内核重新启动了我的开发系统(从 2.6.26 开始)并且编译器再次工作(使用 2.6.25 重新启动不会)。

我们有一个系统保持在 2.6.24,只是为了构建这个芯片,但是感觉有点暴露,以防 linux 世界发展到我们不能再重建一个可以运行的系统编译器(即我们的 2.6.24 系统死掉了,我们无法在新系统上安装和运行 2.6.24,因为某些软件部分不再可用)。

有没有人知道我们可以对更现代的安装做些什么来让这个遗留编译器运行?

编辑

回答一些评论...

可悲的是,丢失了特定于我们芯片的源代码更改。这种损失发生在两个主要的公司重组和几个系统管理员(其中几个确实留下了一个烂摊子)。我们现在使用配置控制,但这对于这个问题来说太迟了。

使用虚拟机是一个好主意,并且可能是我们最终要做的事情。谢谢你的想法。

最后,我按照ehemient的建议尝试了strace,发现最后一个系统调用是brk(),在新系统(2.6.26内核)上返回错误,在旧系统(2.6.24内核)上返回成功。这表明我的虚拟内存真的用完了,除了 tcsh "limit" 在旧系统和新系统上返回相同的值,并且 /proc/meminfo 显示新系统有更多的内存和更多的交换空间。也许是碎片问题或程序加载的位置?

我做了一些进一步的研究,并在内核 2.6.25 中添加了“brk 随机化”,但CONFIG_COMPAT_BRK据说默认启用(禁用 brk 随机化)。

编辑

好的,更多信息:看起来 brk 随机化确实是罪魁祸首,旧版 gcc 正在调用 brk() 来更改数据段的结尾,现在失败了,导致旧版 gcc 报告“虚拟内存耗尽”。有一些记录在案的方法可以禁用 brk 随机化:

  • sudo echo 0 > /proc/sys/kernel/randomize_va_space

  • sudo sysctl -w kernel.randomize_va_space=0

  • setarch i386 -R tcsh用(或“-R -L”)开始一个新的shell

我已经尝试过它们,它们似乎确实有效果,因为 brk() 返回值与没有它们时不同(并且始终相同)(在内核 2.6.25 和 2.6.26 上都尝试过),但是 brk()仍然失败,所以旧版 gcc 仍然失败:-(。

此外,我已经设置vm.legacy_va_layout=1并且vm.overcommit_memory=2没有任何更改,并且我已经使用/etc/sysctl.conf 中保存的设置vm.legacy_va_layout=1重新启动。kernel.randomize_va_space=0还是没有变化。

编辑

在内核 2.6.26(和 2.6.25)上使用kernel.randomize_va_space=0会导致以下 brk() 调用被报告strace legacy-gcc

brk(0x80556d4) = 0x8056000

这表明 brk() 失败,但看起来它失败了,因为数据段已经超出了请求的范围。使用 objdump,我可以看到数据段应该在 0x805518c 结束,而失败的 brk() 表明数据段当前在 0x8056000 结束:

编辑

在下面回应 ehemient 的评论:“将 GCC 视为没有源代码的二进制文件真是太奇怪了”!

因此,使用 strace、objdump、gdb 以及我对 386 汇编器和体系结构的有限理解,我将问题追溯到遗留代码中的第一个 malloc 调用。旧版 gcc 调用 malloc,它返回 NULL,这会导致 stderr 上出现“虚拟内存耗尽”消息。这个 malloc 在 libc.so.5 中,它多次调用 getenv 并最终调用 brk()...我想增加堆...失败了。

由此我只能推测问题不仅仅是 brk 随机化,或者我没有完全禁用 brk 随机化,尽管 randomize_va_space=0 和 legacy_va_layout=1 sysctl 设置。

0 投票
1 回答
398 浏览

cross-compiling - 指向 NSPR/DIST 目录的 Spidermonkey

我一直在尝试交叉编译 Spidermonkey,但遇到了prtypes.h(NSPR) 无法识别的问题。我已经尝试修改Makefile.ref//以指向所需的 NSPR/DIS 目录config.mkjsconfig.mk我一定错过了一些基本步骤,因为它仍然无法使事情正常进行。您对如何正确修改生成文件以将我的蜘蛛猴指向正确的 NSPR 库有任何想法吗?

0 投票
3 回答
14461 浏览

eclipse - 如何让 Eclipse 在非标准位置查找和使用基于 gcc 的工具链

我试图让 Eclipse 与基于 GCC 的 ARM 交叉编译器一起工作。

如何配置 eclipse 以将新工具链添加到其工具链列表中?

工具链为Raisonance分布式GCC工具链:C:\Program Files\Raisonance\Ride\arm-gcc\bin\arm-none-eabi-gcc.exe

0 投票
1 回答
245 浏览

vb6 - 为移动设备交叉编译/重新编译 ActiveX

在我们的项目中,我们有很多用 VB6 编写的 ActiveX 控件。在大型 (x86) 计算机上,它运行良好。这些控件托管在网站上。移动用户也想使用它。
那么是否有任何可能的解决方案来重新编译/交叉编译 .ocx 并使 .cab 文件在 ARM 架构下工作?
或者我可以在手机/PDA 上模拟 x86 架构?

马特乌什

0 投票
5 回答
34332 浏览

compilation - 什么是交叉编译?

什么是交叉编译?