C++ 如何正确链接库文件及其标题?

C++ 如何正确链接库文件及其标题?,c++,g++,static-linking,C++,G++,Static Linking,我正在使用这个库进行一些密码散列。我使用提供的makefile生成了一个名为bcrypt.a的库文件。我的代码中还有头文件,我使用一个类(Cryto.h/Crypto.cpp)围绕头函数创建一个包装器。我正在尝试使用.a库文件编译代码,方法是: g++ -std=c++14 -o geemail auth/auth.cpp services/services.cpp crypto/crypto.cpp database/database.cpp main.cpp libraries/bcry

我正在使用这个库进行一些密码散列。我使用提供的makefile生成了一个名为bcrypt.a的库文件。我的代码中还有头文件,我使用一个类(Cryto.h/Crypto.cpp)围绕头函数创建一个包装器。我正在尝试使用.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
我在crypto.h文件中包含了具有正确函数定义的头文件(bcrypt.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文件中声明的任何函数,即使正确包含了头。链接这些文件的正确方式是什么?

试试以下方法:

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

请注意,您是如何使用
-l
@user4581301I预先编写其他库(sqlite3,Na钠)的。我也曾尝试过这种方法,但得到了相同的错误。在本例中,我只是显式地提供了路径。奇怪的是,它在MacOS上运行良好,但在使用GCC7的Ubuntu17.04中却不行