gpt4 book ai didi

c - 如何链接多个 .c 文件

转载 作者:太空宇宙 更新时间:2023-11-04 04:14:12 24 4
gpt4 key购买 nike

我知道您必须创建一个头文件并将其#include 到您的main.h 文件中。我已经这样做了,当我出于某种原因编译我的代码时,它无法弄清楚我的一个函数在哪里。

我项目的布局是:threads.c makeCityFromInput.h 和 makeCityFromInput.c

我有 threads.c#including the makeCityFromInput.h

这是我尝试编译时发生的情况:

make
gcc -ggdb -std=c99 -Wall -Wextra -pthread -c threads.c
gcc -ggdb -std=c99 -Wall -Wextra -pthread -o threads threads.o -lm -lncursesw -pthread
threads.o: In function `main':
/home/project3/threads.c:183: undefined reference to `readConfig'
collect2: error: ld returned 1 exit status
Makefile:71: recipe for target 'threads' failed
make: *** [threads] Error 1

它无法找到我的 readconfig 文件,即使它在我的头文件中

我的threads.c文件

#define _DEFAULT_SOURCE

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <strings.h>
#include <string.h>
#include <ncurses.h> //displays the cars
#include <pthread.h> //threading
#include <unistd.h>

#include "makeCityFromInput.h"

#define MAX 2048
int main(int argc, char *argv[]){
//Expected input: Name of config file

// If the config file is not given; or too many config files are given
if (argc != 2){
endwin();
fprintf(stderr, "Usage: Enter a configuration file");
exit( EXIT_FAILURE );
}

FILE *fp = NULL;
fp = fopen(argv[1], "r");
assert( fp );
readConfig(fp);
fclose( fp );

return 0;
}

我的 makeCityFromInput.h 文件:

#ifndef _MAKECITYFROMINPUT_H
#define _MAKECITYFROMINPUT_H

void readConfig(FILE *fp);

int *parse_line(char *line, int *numInts);

void create_skyline(int *ground, int size, int maxMissiles);



#endif

我的 makeCityFromInput.c 文件:

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <strings.h>
#include <string.h>
#include <ncurses.h> //displays the cars
#include <pthread.h> //threading
#include <unistd.h>
void readConfig(FILE *fp){
...
}

我的制作文件

#
# Created by gmakemake (Ubuntu Jul 25 2014) on Wed Nov 14 20:05:05 2018
#

#
# Definitions
#

.SUFFIXES:
.SUFFIXES: .a .o .c .C .cpp .s .S
.c.o:
$(COMPILE.c) $<
.C.o:
$(COMPILE.cc) $<
.cpp.o:
$(COMPILE.cc) $<
.S.s:
$(CPP) -o $*.s $<
.s.o:
$(COMPILE.cc) $<
.c.a:
$(COMPILE.c) -o $% $<
$(AR) $(ARFLAGS) $@ $%
$(RM) $%
.C.a:
$(COMPILE.cc) -o $% $<
$(AR) $(ARFLAGS) $@ $%
$(RM) $%
.cpp.a:
$(COMPILE.cc) -o $% $<
$(AR) $(ARFLAGS) $@ $%
$(RM) $%

CC = gcc
CXX = g++

RM = rm -f
AR = ar
LINK.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS)
LINK.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS)
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) -c
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) -c
CPP = $(CPP) $(CPPFLAGS)
########## Flags from header.mak


CFLAGS = -ggdb -Wall -Wextra -pedantic -std=c99 -pthread
# program uses pthreads and curses libraries
CLIBFLAGS = -lncursesw -lpthread -lrt


########## End of flags from header.mak


CPP_FILES =
C_FILES = pt-cruisers.c racer.c
PS_FILES =
S_FILES =
H_FILES = racer.h
SOURCEFILES = $(H_FILES) $(CPP_FILES) $(C_FILES) $(S_FILES)
.PRECIOUS: $(SOURCEFILES)
OBJFILES = racer.o

#
# Main targets
#

all: pt-cruisers

pt-cruisers: pt-cruisers.o $(OBJFILES)
$(CC) $(CFLAGS) -o pt-cruisers pt-cruisers.o $(OBJFILES) $(CLIBFLAGS)

#
# Dependencies
#

pt-cruisers.o: racer.h
racer.o: racer.h

#
# Housekeeping
#

Archive: archive.tgz

archive.tgz: $(SOURCEFILES) Makefile
tar cf - $(SOURCEFILES) Makefile | gzip > archive.tgz

clean:
-/bin/rm -f $(OBJFILES) pt-cruisers.o core

realclean: clean
-/bin/rm -f pt-cruisers

最佳答案

看起来像这样

gcc -ggdb -std=c99 -Wall -Wextra -pthread  -c threads.c
gcc -ggdb -std=c99 -Wall -Wextra -pthread -c makeCityFromInput.c
gcc -ggdb -std=c99 -Wall -Wextra -pthread -o threads threads.o makeCityFromInput.o -lm -lncursesw -pthread

如果您展示您的 make 文件,我们也可以提供帮助...

关于c - 如何链接多个 .c 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53640897/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com