我如何正确 link .a 库文件及其 header?

How do I properly link .a library file and its header?

我正在使用这个 bcrypt 库进行一些密码散列处理。我已经使用提供的 makefile 生成了一个名为 bcrypt.a 的库文件。我的代码中也有 header 文件,我使用 class (Cryto.h/Crypto.cpp) 围绕 header 函数创建包装器。我正在尝试通过以下方式使用 .a 库文件编译我的代码:

 g++ -std=c++14 -o geemail auth/auth.cpp services/services.cpp crypto/crypto.cpp  database/database.cpp main.cpp libraries/bcrypt/bcrypt.a -lsqlite3 -lsodium

我已将我的 header 文件 (bcrypt.h) 包含在我的 crypto.h 文件中,该文件具有正确的函数定义。但是当我 运行 上面的命令时,我一直收到这个错误。

/tmp/ccM1cHRo.o: In function `Crypto::CompareHash(char const*, char const*)':
crypto.cpp:(.text+0x23): undefined reference to `bcrypt_checkpw'
/tmp/ccM1cHRo.o: In function `Crypto::GetGeneratedHash[abi:cxx11](char 
const*, char*, char*)':
crypto.cpp:(.text+0x63): undefined reference to `bcrypt_gensalt'
crypto.cpp:(.text+0x7a): undefined reference to `bcrypt_hashpw'
collect2: error: ld returned 1 exit status

看起来它无法找到 bcrypt.h 文件中声明的任何函数,即使 header 已正确包含。链接这些文件的正确方法是什么?

试试这个:

g++ -std=c++14 -o geemail auth/auth.cpp services/services.cpp crypto/crypto.cpp  database/database.cpp main.cpp -Llibraries/bcrypt -lbcrypt -lsqlite3 -lsodium