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

标签 c linker makefile

是否可以使用 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/

相关文章:

git - 在 Git 工作区中检测修改文件的简单方法是什么?

保存函数指针的容器

c - 无效函数错误?

xcode - 构建错误重复符号 arclite.o

c++ - 在 C++ 中链接到 libredwg 不起作用

C: 字段类型不完整

c - 快速排序算法中的分段故障(堆芯故障)

c - 如何在 C 中使用相同的结构创建线程

linker - 未找到链接 libruli.so 的 g++ 符号

c - 如何在Windows Makefile中定义变量