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

时间:2016-02-22 09:56:40

标签: c

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

include "bcrypt.h"

然后当我跑make时,我得到:

  

database.c:2084:未定义引用`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

1 个答案:

答案 0 :(得分:0)

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

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

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