在使用gcc链接对象文件之前编译时出错

在使用gcc链接对象文件之前编译时出错,c,gcc,command-line,C,Gcc,Command Line,我有使用notepad++用C编程编写的源文件,我正在从命令行运行它们,稍后我需要链接它们以生成.exe文件 以下是生成.exe文件时要使用的命令 gcc logc.c -o logc gcc mainc.c -o mainc gcc -o output logc.o mainc.o 但是当我运行以下命令时,我的编译器返回以下错误状态 gcc logc.c -o logc (x86)/mingw-w64/i686-8.1.0-win32-dwarf-rt_v6-rev0/mingw32/b

我有使用notepad++用C编程编写的源文件,我正在从命令行运行它们,稍后我需要链接它们以生成.exe文件

以下是生成.exe文件时要使用的命令

gcc logc.c -o logc
gcc mainc.c -o mainc

gcc -o output logc.o mainc.o
但是当我运行以下命令时,我的编译器返回以下错误状态

gcc logc.c -o logc

(x86)/mingw-w64/i686-8.1.0-win32-dwarf-rt_v6-rev0/mingw32/bin/../lib/gcc/i686-w64-mingw32/8.1.0/../../../../i686-w64-mingw32/lib/../lib/libmingw32.a(lib32_libmingw32_a-crt0_c.o):crt0_c.c:(.text.startup+0x39): undefined reference to `WinMain@16'
当我运行以下命令编译mainc文件时

C:\Users\user\AppData\Local\Temp\ccskY3nf.o:mainc.c:(.text+0x31): undefined reference to `Log'
collect2.exe: error: ld returned 1 exit status
这是我的mainc.c、logc.c和logc.h文件,供您参考

logc.c文件在这里

#include <stdio.h>
#include "logc.h"

void InitLog()
{
    Log("Initializing Log");
}

void Log(const char* message)
{
    printf(" %s",message);

}
#include <stdio.h>
#include <conio.h>
#include <stdbool.h>
#include "logc.h"

    int main()
    {
        int x = 5;
        bool comparisonResult = x == 5;
        if(comparisonResult == 1)
            Log("Hello World"); 
        return 0;
    }
#ifndef _LOG_H
#define _LOG_H

void InitLog();
void Log(const char* message);

#endif
如何编译单个源文件,然后链接它们并生成可执行文件


提前感谢。

您不需要创建对象文件,因此需要
-c
参数:

gcc logc.c -c
gcc mainc.c -c

gcc -o output logc.o mainc.o

默认情况下,gcc将生成可执行文件,而不是对象文件。因此,当您编译logc.c时,它试图生成一个可执行文件,但找不到
main
函数,因此失败。与main.c类似,它尝试生成一个可执行文件,但找不到
Log

您需要添加
-c
选项来创建对象文件:

gcc logc.c -c -o logc.o
gcc mainc.c -c -o mainc.o

与您的问题无关,但以下划线开头,后跟大写字母的符号(如
\u LOG\H
)保留给编译器和所有范围内的标准库实现。您不应使用此类符号。编译时,始终启用警告(对于
gcc
,至少使用:
-Wall-Wextra-Wconversion-pedantic-std=gnu11
)也强烈建议使用参数:
-ggdb
,以便于使用
gdb
编译器进行调试
-o logc.o
是此处的默认值。是的,这些命令解决了我的问题。如何使用g++编译器转换另一个cpp源文件并链接它们并生成executable@Abhi12在这种情况下,选项与gcc相同。