问题标签 [gnu-toolchain]
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.
windows - 基于 Windows 的 ARM 处理器开发
我是 ARM 世界的新手。我需要能够编写 C 代码、编译它,然后下载到 ARM 仿真器中并执行。我需要使用 GCC 4.1.2 编译器来编译 C 代码。
有人可以为我指出以下问题的正确方向吗?
使用什么工具链?
用什么模拟器?
是否有设置工具链的教程或指南?
gcc - 为什么在 x86_64 上编译静态库时 gcc 不隐式提供 -fPIC 标志
我在编译与静态库静态链接的共享对象时遇到了很多问题。此问题仅出现在 x84_64 平台上。在 x86_32 上进行相同的编译工作时,我没有任何问题。
也许这是特定于操作系统的 GCC 配置,但我的研究表明 GCC 在 x86_64 平台上是如何工作的。无论如何,我在 Ubuntu 10.04 x86_64 上使用 gcc 4.4.3。
问题是如何解决的?...确保所有静态库依赖项都使用 -fPIC 编译。
问题 1: -fpic 和 -fPIC 有什么区别(显然 -fPIC 在 x86 上生成更多指令)?为什么后一种类型在 x86_64 上下文中更相关?
问题 2:我的假设是,当您链接静态代码时,您在链接时将函数硬连接到二进制文件中,为什么它需要“位置无关代码”机制提供的间接级别?
问题 3:现在如果 x86 不需要 -fpic / -fPIC 将共享对象链接到静态档案,为什么 x86_64 需要它?
问题 4:即使需要,为什么不隐式提供?我认为突破性的改变应该是一个很大的禁忌
c - 如何使用 GNU 工具链来学习 C 编程?
我是编程新手,甚至是 Linux 新手。有人告诉我,Linux 是学习编程的最佳操作系统,因为它可以让程序员与机器架构紧密交互。我听说过很多关于 GNU 工具链的事,它在 Linux 上提供了最好的编程环境,所以我决定不使用 IDE,并投入尽可能多的时间来以正确的方式学习东西。
我刚刚安装完 Ubuntu 10.10。我安装了 Vim 并开始学习将它用于我的文本编辑器。此外,我还能够验证我的系统上是否存在 GCC 和 GDB。我正在从这本书中学习用 C 编程 - Computer Science: A Structured Programming Approach using C。虽然它解释了如何使用编辑器、编译器、链接器和运行器来开发和运行程序,但没有解释如何设置和使用它们。所以我的问题是,一旦我在我的文本编辑器中编写了源代码,我如何调用 GNU 工具链来编译和运行我的程序。
c++ - 调试 Visual Studio 开发与“Linux”开发的工作流方面?
好的,所以有很多问题,要求“Linux 上的 Visual Studio 等效”或这个问题的变体。(这里,这里,这里,……)
我想关注一个方面,并询问调试工作流程在不同系统上可能有何不同,特别是 Visual Studio(类似)系统使用的全集成 IDE 方法以及可能更“分离”的面向工具链的方法。
为此,让我介绍一下我认为的“Visual Studio 调试工作流程”的简短描述:
- 给定一个现有项目
- 我打开了项目(从用户的角度来看是一个步骤)
- 我导航到要调试的代码(可能通过搜索我的项目文件,只需打开Find in Files对话框即可。)
- 我在 (a) 行放了一个断点,只需将光标放在该行并点击
F9
- 我在 (b) 行添加了一个“跟踪点”,在该处添加一个断点,然后更改断点属性,这样调试器就不会停止,而是跟踪局部变量的值。
- 我点击
F5
,它会自动编译我的可执行文件,在调试器下启动它,然后我等到 prg 在 (a) 处停止,同时监视 (b) 的输出的跟踪窗口 - 当调试器最终在 (a) 处停止时,我的屏幕会自动在(一次性预配置窗口)中并排显示以下信息:
- 当前调用堆栈
- 最近更改的局部变量的值
- 加载的模块(DLL)
- 所有活动断点及其位置的列表
- 我输入的最后一个监视表达式的监视窗口
- 用于检查原始内存内容的内存窗口
- 显示当前寄存器值的小窗口
加上/减去一些特性,这也是我在 Linux 下的 Eclipse/CDT 下所期望的。在使用 VIM、Emacs、gdb/DDD 等进行开发时,如何检索此工作流程和呈现的信息?
这个问题并不是关于某个工具是否有一个特性,而是关于看到开发/调试工作正在使用特性的组合,并且在您的指尖有大量可用的选项,以及在不使用时如何访问这些信息完全集成的IDE。
gcc - 编译静态库时设置较早的最低内核版本
我的发行版(Arch Linux)最近为其工具链增加了最低支持的 Linux 内核版本。我正在编译一个静态链接然后上传到 Web 服务器的 Web 应用程序,而 Web 服务器上的内核版本对于使用新工具链编译的静态库来说太旧了。(当我尝试在服务器上运行静态二进制文件时出现分段错误。)有没有办法使用 GNU 工具链(GCC、binutils、glibc)编译应用程序,从而忽略需要更新内核版本的功能?
emacs - Linux 上现有 Makefile 的 IDE
当我拥有带有多个 Makefile(库、可执行文件等)的现有 C/C++ 源代码时,进行 IDE 类型设置的最佳/最快方法是什么。
我需要处理 IDE 中的编译器错误,最好导航代码。
过去我使用过 Emacs/Xemacs,它还可以,但我不确定设置它的最佳方法。
build - 最高版本 Python 的 Autofoo 测试
我试图让 autofoo 测试 Python 的最大版本而不是最低版本。例子:
... 将测试 Python >= 2.7,并且可能会出现 /usr/bin/python3。但是,我希望它返回的值不超过 python2.7。
有没有一种简单的方法可以做到这一点?我四处询问,到目前为止,我得到的最好的回答是“重写宏”。
提前致谢!
embedded - 加载时间基地址 cortex-m3 裸机
我正在开发一个带有裸机环境的 cortex-m3 CPU 项目。由于软件升级需要,CPU 上的可执行映像可能位于闪存中的两个地址之一,这会带来问题。映像的起始地址仅在加载时才知道,而在静态链接期间不知道。我不太确定,但我认为这并不真正符合动态加载的条件,但我在这里真的可能被误认为,因为我不是这方面的专家。有没有办法编译和链接图像,因为它的基地址只能在加载时给出,因为没有操作系统也没有动态加载器?
c++ - 如何获取从 C++ 中的特定类继承的所有声明类的列表
我知道这在 C++ 中并不完全可行,但也许是一个可以生成具有函数的代码的工具链,当调用该函数时,它会给我所有这些类的列表。例如,在多个文件中,我有以下内容:
然后,在运行时,我只想要一个指向该类的单个实例的指针。假设我生成的代码如下所示:
此外, superList 的类型为List<ParticularClass*>
. 另外,我将使用 QtParticularClass
并将其QObject
派生,因此无论如何我都可以获取类的名称。我需要基本上反省这个类,所以我的内部代码并没有真正关心新定义的类型。
那么,有没有办法用一些工具链生成这段代码?如果可以qmake
单独使用,那就像在该死的蛋糕上锦上添花:)
非常感谢您的时间。
gnu-toolchain - 如何为 sde-objcopy 指定架构?
我需要使用 sde-objcopy 将图片转换为目标文件(.o),然后我可以在我们的无操作系统系统中使用这张图片。我已经测试了 objcopy 命令,它在我的 PC(Fedora 12)上运行良好。例如,下面的命令会将 test.jpg 转换为 test.o。
objcopy -I binary -O elf32-i386 -B i386 ../stdy/test.jpg test.o
以下是我的问题:
一个。sde-objcopy 没有“-B”选项来指定架构,但如果我没有指定架构,它将响应如下警告:
$ sde-objcopy -I binary -O elf32-little test.jpg test.o
sde-objcopy:警告:输出文件不能代表架构未知!
如何解决此警告?
乙。似乎 objcopy 使用文件名在目标文件中生成符号。如果我使用完整路径(例如/home/owner/stdy/test.jpg
)作为 objcopy 的参数,它将生成长命名符号。有什么优雅的方法可以解决这个问题吗?
$ objcopy -I binary -O elf32-i386 -B i386 ../stdy/test.jpg test.o
$ nm test.o