问题标签 [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 - 整合一个 Unix 工具链开发环境:cygwin、MSYS2、git bash、Qt
用cygwin和emacs很久了,集成一直有问题。cygwin 下的 xemacs 运行良好,但需要运行 xwindows,这很不愉快。然后我添加了 git bash 。
现在,如果你算一算,我在 windows 下有 4 个独立的 unix 实现:
在 Windows 上运行本机的 emacs。
我想知道我是否可以合并和删除其中一些工具。cygwin 和 MSYS2 有 git 似乎很可笑。那为什么要有一个单独的 git bash 呢?根据我的阅读,git 无论如何都在 MSYS2 中运行。
但我高度怀疑。过去,cygwin 与 mingw 不一样。我发现了两个大错误——一个是运行时库,它在 mingw 上使用了本机库。因此,即使编译器相同,使用 long double 编译程序也会产生无法运行的程序。
我现在试过了,它在 MSYS2 中工作。那可能是因为他们正在使用所有 gnu 库,或者因为微软已经更新。
线程在 mingw 中也不起作用,但在 cygwin 中起作用。我刚刚在 MSYS2-64 中使用以下 C++ 代码进行了测试:
在 emacs 下运行,如安装在 MSYS2 中,作业不会停止(我必须杀死 shell)。它确实在命令行上工作。如果我取消注释睡眠调用,它会同时挂在 MSYS2 bash 和 emacs 命令 shell 中。
然后是git的问题。
git bash 使用 /c/Users/myuser 作为存储 .ssh 的目录。有用
当我在cygwin下echo $HOME时,它显示/c/Users/myuser但它仍然尝试使用/home/myuser,它不存在,这意味着.ssh目录不存在,所以它失败了。所以我可以在 cygwin 中构建,但必须推入 git bash,这很烦人。我无法在 git bash 中构建,因为它没有完整的开发环境。
MSYS2 声称 HOME 是 /c/Users/myuser 但是在尝试 git push 时它说同样的错误:
无法创建目录“/home/myuser/.ssh”。所以在里面的某个地方,它仍然硬编码了 .ssh 应该在 /home/myuser 而不是 c:/Users/myuser 的概念。
更糟糕的是,在 cygwin 中有一个 /home 目录,我似乎记得它默认创建 /home/myuser 虽然它现在不存在。在 MSYS2 中,没有 DIRECTORY /home,我想知道是否应该创建一个。
我可以创建一个符号链接到 c:/Users/myuser,如果它在 Windows 下工作?我刚试过这个:
贝壳挂了。这不好!我杀了壳,又跑了。不知何故,那里有一个目录 /home/myuser (但不是我的符号链接)。它是如何产生的,我不知道。但是我在里面创建了一个符号链接.ssh,现在它可以工作了。但这让我很紧张,因为我不明白发生了什么。
MSYS64 比 cygwin 有很大的优势。有一个包管理器,它安装得更快,它比 cygwin 小得多。编译器较新。
emacs 和 MSYS64 仍然存在一些问题,我将在一个单独的问题中提出,但由于它似乎工作得很好,问题是,我能负担得起摆脱其他问题吗?我正在研究这个,看看我是否可以要求学生为 C++ 和数据结构类安装它,所以我绝对希望线程和编译能够工作。到目前为止我无法解决的错误包括:
是否有线程的解决方法
/home/user 发生了什么?我让它工作了,但这可能会在以后咬人,它必须被理解。
是否还存在其他兼容性问题?
线程问题似乎仍然存在。
综上所述,有没有什么办法可以在MSYS2中使用git,我可以安全地摆脱git和cygwin吗?还是有理由保留 cygwin?我必须单独保留 git bash 吗?
linux - 替换/覆盖静态链接库
我有一个目标文件——foo.so
由供应商提供。该目标文件与一个公开可用的库静态链接 - bar_1.0.a
. 有一个新版本的库bar_1.1.a
修复了一个严重的错误,但供应商没有提供新版本的foo.so
,所以我不能利用这个错误修复。
因为我无权访问 的源代码foo.so
,所以我无法针对新版本的bar
. 我确实可以访问 的源代码bar
,所以我可以随意构建它。1.0 和 1.1 之间的符号bar
没有变化,只是一些实现。
我想知道是否有一种方法可以替换/覆盖其中的静态链接bar_1.0.a
库,foo.so
而bar_1.1.a
无需访问foo.so
. 或者,如果这是不可能的,我可以以某种方式强制foo.so
动态链接,bar_1.1.so
即使它是静态链接的bar_1.0.a
?
我知道有各种LD_*
环境变量会影响动态链接,但我认为这在这种情况下不会有帮助。
android - 未找到 Ubuntu 16.04“poll.h”上的 aarch64-linux-android-gcc 错误
嗨,我正在尝试使用来自 android-ndk 的 gcc-4.9 在 Ubuntu 16.04 上交叉编译 Android arm64 的代码,但无法摆脱此错误:
我认为这是因为无法以正确的方式访问工具链,因为在我得到之前:
请指教。
linux - How to add wxWidgets to linaro toolchain and x-compile in Win7 for Linux Arm?
I develop on Windows7 and need to cross-compile for a Beaglebone Black (running a Debian Jessie linux) Using a Linaro toolchain, I'm able to compile a "Hello Word" console executable using various IDEs (Codelite, Code::Block and Eclipse DS-5).
Now I need to add wxWidgets in the toolchain, and debug it on Windows and release on the BBB.
I have no problem at compiling and debugging for Windows, but I don't know how to add the wxWidgets to the toolchains.... what wx sources i need (linux, i suppose, but how to build it?) and how to add them in the chain? What should i apt-get on the BBB?
arm - 在 Windows 上构建和调试 ARMV8 汇编器应用程序
我正在尝试学习 ARMV8 汇编程序,并正在尝试在 Windows 上构建一个测试应用程序。我已经安装了 ARM DS-5 社区版,版本 5.26.2。在尝试安装工具链后,我终于在这里安装了“mingw32”工具链:here。这似乎可行 - 我现在可以编译和链接我的应用程序(它由一个 c 文件和一个 .s 程序集文件组成。创建的目标是一个“.axf”文件。
但我无法调试。我将调试器设置为“\gcc-linaro-6.3.1-2017.02-i686-mingw32_aarch64-linux-gnu\bin\aarch64-linux-gnu-gdb.exe”,位于我下载工具链的目录之外。gdb 启动,但我收到以下错误: 最终启动序列中的错误 无法执行 MI 命令:-exec-run 来自调试器后端的错误消息:不知道如何运行。尝试“帮助目标”。不知道怎么跑。尝试“帮助目标”。
有什么建议么?坦率地说,我真的不知道我在这里做什么。我不确定我是否正确设置了工具链。问题是我找不到任何关于如何在 Windows 中执行此操作的文档。
提前致谢!
arm - 如何构建 newlib 以优化大小?
我正在构建一个以 Newlib 2.5.0 作为目标 C 库的 arm-eabi-gcc 工具链。
目标嵌入式系统更喜欢较小的代码大小而不是执行速度。如何配置 newlib 以支持更小的代码大小?
默认构建会生成一个strstr
代码大小超过 1KB 的版本。
c - 裸机 (elf) 程序构建的 dlmalloc 编译期间出错
我正在使用 gnu sparc 工具链。我有 sparc-ab-elf-gcc 和 sparc-ab-linux-gcc。('ab' 是处理器名称)。我想在baremetal(没有操作系统)上编译一个使用malloc和free(这个程序应该在linux上运行)的程序。所以我应该使用 sparc-ab-elf-gcc 编译它。我听说我可以在这种情况下使用 dlmalloc。(请参阅裸机环境中的类似 stdlib 的库?(内存管理和希望 pthread 支持))但我看到一些简单测试程序的编译错误,它每次只执行一次 malloc 和 free 。
我的裸机系统没有 sys/mman.h (我在 elf 工具链库中搜索过)所以在定义 LACKS_SYS_MMAN_H 后再次尝试并得到
dlmalloc.c 是一个很长的程序。(我把它分为malloc.h和malloc.c)下面是函数出错..
有人可以给我一盏灯吗?
debugging - 构建 Linux 内核映像 (vmlinux) 以使用 DWARF3 而不是 DWARF4
我正在开发一个依赖于劳特巴赫 JTAG 调试器硬件和软件的项目,对目标 JTAG 电缆的支持于 2011 年 7 月结束。我们在 omap2 处理器上使用 Linux 2.6.33 内核。我们正在使用 gcc 4.9.2 构建内核映像(不确定 bintools 的版本)。
对于那些不熟悉劳特巴赫如何为其软件授权的人,目标电缆(连接调试盒和目标)带有支持合同日期。任何版本的 Lauterbach Trace-32 软件在支持期结束之前和之前都可以使用,但是在电缆支持结束之后的任何版本都可以使用,每个会话演示期只有 30 分钟。我们正在通过我们的采购流程来更新电缆的支持合同,但在完成之前(可能需要几个月),我们仍然坚持现有的。
对于 2017 年 7 月之前发布的 Trace-32 调试器软件的最新版本,我们使用的工具链生成的调试信息似乎太新了。尝试使用以下命令加载内核映像 (vmlinux) 的符号:
失败并显示类似以下的消息:
当然,最简单的解决方案是更新到支持我们工具链生成的任何 ELF/DWARF 组合的 Trace-32 软件的第一个版本。我们知道最新版本的作品,但我们的电缆不支持该版本,并且直到我们的采购人员确定这是测试设备还是软件(它们来自不同的预算)。
在接下来的几个月里,我们需要一个变通办法。我正在寻找以下内容之一:
- 告诉工具链生成与调试器软件兼容的调试信息的某种方式
- 将我们的工具链生成的 vmlinux ELF/DWARF 文件转换为与我们被迫使用的 Trace-32 版本(R.2010.11.000028724)兼容的早期 ELF/DWARF 格式版本的某种方法。
- 我们没有想到的问题的任何其他解决方案
我提前感谢大家的帮助。
编辑:我不能 100% 确定工具链是生成 DWARF3 还是 DWARF4,所以我可能需要制作 ELF/DWARF2 “vmlinux”
arm - STM32F103C8T6 复位按钮后不工作
我有带有 ST-LINK V2 的“ARM 微控制器的最小系统开发板 – STM32F103C8T6”。这是主要代码,然后是链接器脚本,然后是启动:
1)主要:
2)链接器:
3)启动:
当我尝试用
st-flash 写入 main.bin 0x08000000
我得到以下信息:
并且 LED 不闪烁,但是当我第一次使用 ARDUINO IDE(为此板)上传任何代码时,我运行 prevouis 命令,LED 开始闪烁,但如果我按下重置按钮或拔下插头,然后插入 st-link agian LED 停止闪烁。
所以我认为问题出在我的链接器或启动代码上,但我不知道它在哪里。
启动代码或链接描述文件有什么问题?
- - - 编辑 - - -
拆卸结果:
arm-none-eabi-objdump -D main.elf > dump.S