【问题标题】:MinGW Doesn't Generate an Object File When CompilingMinGW 编译时不生成目标文件
【发布时间】:2010-03-21 18:28:05
【问题描述】:

我刚在旅途中为我买了一台新笔记本电脑,然后在我的空闲时间,我开始通过尝试编译我自己的用 C++ 编写的操作系统来测试MinGW,然后我'我们已经创建了所有需要的文件和kernel.cpp:

extern "C" void _main(struct multiboot_data* mbd, unsigned int magic);
 
void _main( struct multiboot_data* mbd, unsigned int magic )
{
   char * boot_loader_name =(char*) ((long*)mbd)[16];
 
   /* Print a letter to screen to see everything is working: */
   unsigned char *videoram = (unsigned char *) 0xb8000;
   videoram[0] = 65; /* character 'A' */
   videoram[1] = 0x07; /* forground, background color. */
}

并尝试用g++编译

G:> g++ -o C:\kernel.o -c kernel.cpp -Wall -Wextra -Werror -nostdlib -nostartfiles -nodefaultlibs
kernel.cpp:在函数“void _main(multiboot_data*, unsigned int)”中:
kernel.cpp:8:警告:未使用的变量“boot_loader_name”
kernel.cpp:在全局范围内:
kernel.cpp:4:警告:未使用的参数 'magic'

G:>

但它不会在C:/> 处创建任何二进制文件。

我能做什么?

【问题讨论】:

  • 为什么不尝试一个最简单的例子:1)在某处创建一个像1.cpp这样的文件,其中只包含int main() {return 0;}(以及最后的空行); 2)在该文件夹中运行g++ -c 1.cpp -Wall;然后看看会发生什么?

标签: c++ binary g++ mingw


【解决方案1】:

它不会创建文件,因为您启用了-Werror。您收到的关于未使用变量的警告被计为错误,因此编译会中止。暂时将它们注释掉:

void _main( struct multiboot_data* mbd, unsigned int /* magic */ )
{
    // char * boot_loader_name =(char*) ((long*)mbd)[16];
    // ...
}

它应该构建良好。另外,不应该将_main() 声明为main(),然后允许编译器将其“修改”为_main()编辑:假设您只需要目标文件,您可能还想使用-c 来跳过链接阶段。

【讨论】:

  • 啊,对,extern "C" 负责处理。傻兔子。另外,我已经有一段时间没有查看 wiki 了。
【解决方案2】:

您是否尝试先在本地目录中创建.o 文件?你得到了什么结果?

【讨论】:

  • 是的,我仍然一无所获。
  • @Nathan:这很奇怪。尝试将空的main 编译成可执行文件,mingw 会创建它吗?
  • @Nathan: 然后使用相同的命令行调用,您的 .cpp 文件什么也没有创建?根本没有新文件?
  • @Eli: 如果我做一个 Hello World(使用cout, #include...) 它编译得很好,但是如果我尝试编译我的简单内核,我不会创建任何东西.
  • @Nathan: 会不会是因为你的内核没有main 函数?
【解决方案3】:

C:\ 通常被阻止在 Vista 和 7 上写入,因为它被认为是一个非常敏感的位置,并且您必须以管理员身份运行才能被允许这样做(例如,显式启动命令提示符或具有管理员权限的 g++)。如果您在“常规”(非管理员)用户帐户上运行,即使在 XP 中也是如此。

也许这就是发生在你身上的事?

【讨论】:

  • 我已更改为G:,但仍然一无所获。
猜你喜欢
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多