我有使用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);
}
mainc.c文件在这里
#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;
}
和logc.h文件在这里
#ifndef _LOG_H
#define _LOG_H
void InitLog();
void Log(const char* message);
#endif
如何编译单个源文件,然后链接它们并生成可执行文件。
谢谢。
答案 0 :(得分:2)
您不创建目标文件,因为您需要使用-c
参数:
gcc logc.c -c
gcc mainc.c -c
gcc -o output logc.o mainc.o
答案 1 :(得分:0)
默认情况下,gcc将生成可执行文件,而不是目标文件。因此,当您编译logc.c时,它将尝试制作可执行文件,但找不到main
函数,因此失败。与main.c类似,它尝试制作可执行文件,但找不到Log
您需要添加-c
选项来创建目标文件:
gcc logc.c -c -o logc.o
gcc mainc.c -c -o mainc.o