gpt4 book ai didi

c - gcc 退出时未定义对头文件中函数的引用

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

我想编译一个小程序,它有一个非常简单的 makefile,但我似乎无法让它工作。也许你可以帮助我。 makefile 具有以下目标:

visca-cli: visca-cli.c libvisca_hl.o
gcc -Wall -o visca-cli visca-cli.c /usr/local/lib/libvisca.so libvisca_hl.o

libvisca_hl.o: libvisca_hl.c
gcc -Wall -c libvisca_hl.c

我可以成功“制作 libvisca_hl.o”并创建 .o 文件。但是“make visca-cli”失败并显示类似

的错误消息

libvisca_hl.c:(.text+0x468a): undefined reference to `VISCA_get_md_disptime'

对于 libvisca.h 中定义的每个函数(这里是 VISCA_get_md_disptime)

以下是各种文件的包含部分(忽略标准库):

在 visca-cli.c 中:

#include "libvisca.h"
#include "libvisca_hl.h"

在 libvisca_hl.c 中:

#include "libvisca_hl.h"

在 libvisca_hl.h 中:

#include "libvisca.h"

所有用“”引号的包含都存在于我运行 make 的本地目录中以及所有源文件所在的位置。没有子文件夹。所以我猜问题出在makefile上?任何帮助表示赞赏!

最佳答案

编译/链接命令行中库和对象的顺序很重要。在您的情况下,您只需要将共享对象放在末尾:

gcc -Wall -o visca-cli visca-cli.c libvisca_hl.o /usr/local/lib/libvisca.so

在大多数系统上,/usr/local/lib 已经是标准库搜索路径的一部分,因此您可以进一步简化:

gcc -Wall -o visca-cli visca-cli.c libvisca_hl.o -lvisca

关于c - gcc 退出时未定义对头文件中函数的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17477950/

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