gpt4 book ai didi

c - 库中函数的 "undefined reference to function"错误

转载 作者:太空宇宙 更新时间:2023-11-04 10:44:08 25 4
gpt4 key购买 nike

我正在尝试使用 C 来处理 id3 标签,所以我下载并安装了 mplib。

我试图在 mplib.h 中调用这个函数,其中 __P 是一个宏

extern id3_tag_list* mp_get_tag_list_from_file __P((const char* path));

通过写入 example.c:

int main() {
char* pa = "R U MINE";
id3_tag_list* list = mp_get_tag_list_from_file(pa);
id3_tag *newTag = list->tag;
printf("tag %d\n", newTag->version);
return 0;
}

但是当我链接时,我得到一个错误:

example.o: In function `main':
example.c:(.text+0x27): undefined reference to `mp_get_tag_list_from_file'
collect2: error: ld returned 1 exit status
make: *** [example] Error 1

我的 makefile 看起来像这样

OBJECTS = example.o
target=example
misc=Makefile
cflags=-Wall -g -O0 -Werror -pedantic -std=c99

all: $(target)

$(target) : $(OBJECTS) $(misc)
gcc $(cflags) -o $(target) $(OBJECTS)

clean:
rm -f $(OBJECTS) $(target)

我在编译这个时遇到了问题。我认为问题是我在将它链接到实际定义该函数的实际 mplib.c 文件时遇到了问题,但我不确定如何准确地做到这一点。我从 http://mplib.sourceforge.net/ 得到了图书馆我使用“make”和“make install”安装了它。我是否应该手动将 mplib.c 文件移动到某处?

最佳答案

如果你构建mplib 1.0.3 ,它创建了一个库 libmp.a。因此,您需要在链接器命令行中指定-lmp,也许还需要指定-L/where/you/installed/it/lib 来指定库所在的目录安装。


链接器命令行可能如下所示:

LDFLAGS = -L/usr/local/lib
LDLIBS = -lmp

gcc $(cflags) -o $(target) $(OBJECTS) $(LDFLAGS) $(LDLIBS)

实际上,如果它看起来像这样会更好:

$(CC) $(CFLAGS) -o $@ $(OBJECTS) $(LDFLAGS) $(LDLIBS)

大写宏 CFLAGS 用于 C 编译器的标志。 $@ 表示“当前目标的名称”。 LDFLAGS 是链接器的标志,例如在哪里可以找到库,LDLIBS 包含库的规范。诸如 -lmp 之类的选项表示“在搜索位置列表中的每个目录中查找 libmp.solibmp.a”库'(足够接近)。 -L 选项将以下目录作为库搜索位置列表的前缀。

关于c - 库中函数的 "undefined reference to function"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33849895/

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