2016-02-22 26 views
0

我正在嘗試將bcrypt實現到一個我發現的開源項目中,更多的是學習東西。我的git克隆https://github.com/rg3/bcrypt和移動bcrypt.h bcrypt.ccrypto_blowfish到我的項目文件,然後在我的文件database.c我已經我已經包含了一個頭文件,但是在嘗試運行make時仍然未定義

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 
+0

請顯示完整的編譯器命令行。 – Bort

+0

@你的意思是生成文件?要麼? – Datsik

+0

這是一個鏈接器錯誤 - 您需要鏈接到定義函數的文件或庫。 (頭文件只包含一個聲明。) – molbdnilo

回答

0

在.h文件中的bcrypt_checkpw放在extern C so it has C linkage

.c文件中的bcrypt_checkpwC++聯動

它們是不同的符號,所以你會得到鏈接錯誤。

相關問題