不存在的目录中的多重定义
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 命令没有删除该库,它只是一个正在使用的旧库
【讨论】:
以上是关于不存在的目录中的多重定义的主要内容,如果未能解决你的问题,请参考以下文章