c - 我已经包含了一个头文件,但在尝试运行 make 时仍然未定义

标签 c

我正在尝试将 bcrypt 实现到我发现的一个开源项目中,这更多的是一种学习的东西。我已经 git 克隆 https://github.com/rg3/bcrypt并将 bcrypt.h bcrypt.ccrypto_blowfish 移动到我的项目文件中,然后在我的文件 database.c 中,我已经

include "bcrypt.h"

然后当我运行 make 时,我得到:

database.c:2084: undefined reference to `bcrypt_checkpw'

这就是我的使用方式

    int ret;
    ret = bcrypt_checkpw(pass, row[0]);
    assert(ret != -1);

    if (ret == 0) {
            return 1;
    } else {
            return 2;
    }

我有一个 Makefile 我不确定我是否做对了,但我将 bcrypt.h 添加到了 makefile

.obj/database.o:        database.c bcrypt.h server.h log.h create.h player.h sleep.h tool.h drdata.h drvlib.h timer.h direction.h map.h mem.h database.h misc_ppd.h badip.h

全部编译

gcc -O -g -m32 -rdynamic -L/usr/lib/mysql -o server .obj/server.o .obj/io.o .obj/libload.o .obj/tool.o .obj/sleep.o .obj/log.o .obj/create.o .obj/notify.o .obj/skill.o .obj/do.o .obj/act.o .obj/player.o .obj/rdtsc.o .obj/los.o .obj/light.o .obj/map.o .obj/path.o .obj/error.o .obj/talk.o .obj/drdata.o .obj/death.o .obj/database.o .obj/see.o .obj/drvlib.o .obj/timer.o .obj/expire.o .obj/effect.o .obj/command.o .obj/date.o .obj/container.o .obj/store.o .obj/mem.o .obj/sector.o .obj/chat.o .obj/statistics.o .obj/mail.o .obj/player_driver.o .obj/clan.o .obj/lookup.o .obj/area.o .obj/task.o .obj/punish.o .obj/depot.o .obj/prof.o .obj/motd.o .obj/ignore.o .obj/tell.o .obj/clanlog.o .obj/respawn.o .obj/poison.o .obj/swear.o .obj/lab.o .obj/consistency.o .obj/btrace.o .obj/club.o .obj/teufel_pk.o .obj/questlog.o .obj/badip.o -lmysqlclient -lm -lz -ldl -lpthread
.obj/database.o: In function `load_char_pwd':
/home/ec2-user/astonia3_server/database.c:2084: undefined reference to `bcrypt_checkpw'
collect2: error: ld returned 1 exit status
make: *** [server] Error 1

最佳答案

.h 文件中的 bcrypt_checkpw 放在 extern C 上,因此它具有 C 链接

.c 文件中的 bcrypt_checkpw 具有 C++ 链接

它们是不同的符号,因此您会收到链接错误。

关于c - 我已经包含了一个头文件,但在尝试运行 make 时仍然未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35550576/

相关文章:

从 x86 汇编器调用 C 函数

c - 我是否在 C 中正确初始化了自定义结构?

c++ - 如何将 Windows 进程重置为以前的状态?

c - 如何应用结构偏移量?

c - Apache Avro C 安装

android - 为 Objective-c 和 java 函数创建一个 dll

c++ - 使用struct和point来输入和输出信息

c - x 向服务器发送数据以在 GUI 上显示输出的线程数

c - 在 ruby​​ 上调用 c 函数时出现段错误

C 编程基础