我知道如何编译C应用程序而不使用GCC在裸机嵌入式应用程序中链接任何库,只需设置启动函数,最后设置程序集startup.s文件。
相反,我无法在Windows中执行相同的操作(我正在使用MINGW32 GCC)。似乎与-nostdlib的链接也删除了在main之前需要执行的所有内容,所以我应该编写一个特定的启动但我没有找到任何关于它的文档。
之所以我需要在没有C std lib的情况下进行编译是因为我正在为小型32位微控制器编写一个简化的C std lib,我想在Windows下使用GCC对该库进行测试和单元测试。所以,如果有另一种最简单的方法,那对我来说是可以的。
感谢。
答案 0 :(得分:1)
我发现解决方案将-nostdlib和-lgcc一起添加到ld(或gcc用作链接器)。通过这种方式,C标准库不会自动链接到应用程序,但启动应用程序所需的一切都已链接。
我还发现这些开关的顺序很重要,它可能根本不起作用,信号丢失at_exit()函数或没有任何错误/警告的工作,具体取决于选项的顺序和位置。
我发现了使用基于Eclipse的IDE的另一个小复杂功能,因为在“设置”菜单中有一些不同的方法,所以要按照正确的顺序编写选项,我需要在不同的地方设置它们。
之后我遇到了一个新问题:我认为单元测试库至少需要一个能够写入stdout或文件的函数。
我发现使用""和<>强制编译器和链接器使用我的库和C标准库所需的库模块。
所以,例如:
a︀ = 1; a︁ = 2; a︀ == 1 && a︁ == 2; // true
允许我使用C stdlib stdout函数测试我的所有库字符串函数。 它适用于使用GCC和GCC交叉编译器。