不存在的目录中的多重定义

Posted

技术标签:

【中文标题】不存在的目录中的多重定义【英文标题】:Multiple definition in non-existent directory 【发布时间】:2015-02-25 03:52:42 【问题描述】:

我正在尝试编译源文件,但在不存在的目录中遇到多重定义错误。

情况如下:

    我正在编译一个程序,我们称之为 prog1.c。该程序编译良好​​li> 我可以毫无问题地将其他程序(prog2.c、prog3.c)链接到这个库 当我尝试将静态库链接到 prog1.c 时,出现多重定义错误,其中冲突函数的第一个定义来自不存在的目录

这就是奇怪的地方:

    目录.../lab5/util/list.c 不存在! (见下面的错误代码) 我的 list.c 中只有一部分函数被多次定义。并非 list.o 中的所有函数都有这个问题

错误:

../util/libname.a(prog.o): In function 'function1':
.../dir_ok/util/prog.c:42: multiple definition of 'function1'   // dir_ok exists
../util/libname.a(prog.o): .../dir_foo/util/prog.c:41: first defined here  // dir_foo exists, but there is no dir_foo/util.

生成文件:

# Makefile
# Flags
CC = gcc
CFLAGS = -g -Wall -pedantic -std=c11
CLEANLOC=src

#directory names
VPATH = ./:./src/:../util/

UTILDIR = ../util/
UTILFLAG = -llibnameutil
UTILLIB = $(UTILDIR)liblibnameutil.a
UTILC = list of .c, including prog.c that gives the error
UTILH = list of .h, including prog.h that gives the error

EXEC = foo
OBJS = foo.o
SRCS = foo.c, foo.h

.PHONY: all
all: $(EXEC)

$(EXEC): $(OBJS) $(UTILLIB)
    $(CC) $(CFLAGS) $^ -o $@ -L$(UTILDIR) $(UTILFLAG)

$(UTILLIB): $(UTILC) $(UTILH)  
    cd $(UTILDIR); make;

$(OBJS): $(SRCS)
    $(CC) $(CFLAGS) -c $^

从概念上讲,这可能是什么问题?如果需要,我愿意发布更多代码。我认为问题出在我的 prog1.c 中,因为 prog2.c 和 prog3.c 都可以在静态库和 prog.o 中正常工作。

【问题讨论】:

【参考方案1】:

我想通了。我不敢相信我犯了这样一个微不足道的错误。我的 Make: clean 命令没有删除该库,它只是一个正在使用的旧库

【讨论】:

以上是关于不存在的目录中的多重定义的主要内容,如果未能解决你的问题,请参考以下文章

类 App\Http\Controllers\ManagerLoginController 不存在

是否存在需要多重继承的场景? [关闭]

linux下如何建立多级文件目录?

MapReduce多重MR如何实现

◮OpenGL-抗锯齿

多重DES