gpt4 book ai didi

c - 在c中链接具有多个主要功能的文件

转载 作者:行者123 更新时间:2023-12-04 11:18:19 26 4
gpt4 key购买 nike

是否可以使用 makefile 链接两个 C 文件,这两个 C 文件相互调用函数,但两者都有自己的 main 函数。

例如: C1.c 使用 C2.c 中的函数 f() 但两者都有 main 函数,我希望 C1.c 中的 main 是仅被视为 main

FILES.o=set.o hash.o printnfa.o input.o nfa.o dfa.o terp.o minimize.o defnext.o print_ar.o pairs.o squash.o signon.o print.o lex.o assort.o prnt.o printv.o bintoasc.o ferr.o onferr.o fputstr.o pchar.o driver.o searchenv.o hashadd.o esc.o 

PROGRAM= Lexer
INC := -I./debug.h -I./global.h -I./stack.h -I./set.h -I./hash.h
CFLAGS=-DMAIN
all: ${PROGRAM}

${PROGRAM}: ${FILES.o}
${CC} -o $@ ${CFLAGS} $(INC) $^ ${LDFLAGS} ${LDLIBS}

现在 terp.c 有一个 main 并且 lex.c 也有一个 main。我只想考虑 lex.c 的 main

最佳答案

这将特定于您使用的链接器。在 Linux 上,您可以将 --allow-multiple-definition 标志传递给链接器,以便在多个定义的情况下仅使用第一个符号:

${PROGRAM}: ${FILES.o}
${CC} -Xlinker --allow-multiple-definition -o $@ ${CFLAGS} $(INC) $^ ${LDFLAGS} ${LDLIBS}

这将忽略所有关于重复符号的错误,并导致链接器忽略任何重新定义。确保包含您希望使用的符号的目标文件出现在列表中的任何重新定义之前。

关于c - 在c中链接具有多个主要功能的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22665187/

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