能否将从.c源代码创建的目标文件.o转换为.exe可执行文件?如果可能,是否有使用gcc的直接命令?
能否将从.c源代码创建的目标文件.o转换为.exe可执行文件?如果可能,是否有使用gcc的直接命令?
gcc foo.o -o foo.exe
__static_initialization_and_destruction_0(int, int)' 中: /usr/include/c++/7/iostream:74: 对
std::ios_base::Init::Init()' 未定义的引用 - CS QGB将.o
转换为.exe
可能是可行的,具体取决于.o
文件的内容。 .o
必须满足.exe
的要求之一,即包含一个main
函数。
通常我会按主题将项目分成多个部分,每个部分都会被编译成一个.o
文件。单独的部分无法转换为.exe
,但是所有部分组合起来可以转换。
例如,如果我编译以下文件,则会生成一个.o
文件:
{hello.c}
#include <stdio.h>
void Hello()
{
puts("Hello");
return;
}
接下来,我编译:
gcc -c hello.c -o hello.o
这将创建 hello.o
文件。由于它没有起始函数,因此无法将其转换为 .exe
文件,它只是一些信息。
但是,以下文本可以从 .o
转换为 .exe
:
{main.c}
#include <stdio.h>
int main(void)
{
puts("Hello from main.\n");
return 0;
}
创建一个 .o
文件: gcc -c -o main.o main.c
由于它有一个入口点,语言的定义命名为main
,因此main.o
可以转换为.exe
:
gcc -o main.exe main.o
简而言之,有些.o
文件可以转换为.exe
,而有些则不能。在C和C++语言中,.o
文件必须具有 main
函数才能成为可执行的.exe
文件。注意:在C和C++语言规范中,在创建可执行文件之前不需要将代码翻译成.o
文件。
gcc -c hello.c -o hello.o
创建 .o
文件,然后第二次使用 gcc -c -o main.o main.c
而不是 gcc -c main.c -o main.o
来创建 .o
文件? - jIIhello.c
文件演示了如何创建独立的.o
文件。main.c
文件演示了如何将独立的.o
文件转换为exe
文件。hello.c
不能转换为exe
文件,除非与包含入口点的另一个文件链接。 - Thomas Matthews