我知道如何在裸机嵌入式应用程序中使用 GCC 编译 C 应用程序而不链接任何库,只需设置启动函数并最终设置程序集 startup.s 文件。
相反,我无法在 Windows 中执行相同的操作(我使用的是 MINGW32 GCC)。似乎与 -nostdlib 的链接也删除了在 main 之前需要执行的所有内容,所以我应该编写一个特定的启动但我没有找到任何关于它的文档。
因为我需要在没有 C std lib 的情况下进行编译,原因是我正在为小型 32 位微 Controller 编写一个 rduced C std lib,我想在 Windows 下使用 GCC 测试和单元测试这个库。所以,如果有其他最简单的方法对我来说没问题。
谢谢。
最佳答案
我找到了将 -nostdlib 和 -lgcc 一起添加到 ld(或用作链接器的 gcc)的解决方案。通过这种方式,C 标准库不会自动链接到应用程序,但启动应用程序所需的一切都已链接。
我还发现这些开关的顺序很重要,它可能根本不工作,信号丢失 at_exit() 函数或工作时没有任何错误/警告,具体取决于选项的顺序和位置。
我在使用基于 Eclipse 的 IDE 时发现了另一个小问题,因为在“设置”菜单中有一些不同的方法,所以为了以正确的顺序编写选项,我需要在不同的地方设置它们。
之后我遇到了一个新问题:我不认为单元测试库至少需要一个能够写入标准输出或文件的函数。
我发现使用 ""和 <> 会强制编译器和链接器使用我的库和 C 标准库所需的库模块。
例如:
#include "string.h" // points to my library include
#include <stdio.h> // points to C stdlib include
允许我使用 C stdlib stdout 函数测试我所有的库字符串函数。 它可以同时使用 GCC 和 GCC 交叉编译器。
关于c - GCC:在不链接任何库的情况下编译应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48256146/