Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在c+中使用bcrypt+;在Linux下使用包装器libbcrypt_C++_Linux_Gcc_Bcrypt - Fatal编程技术网

C++ 如何在c+中使用bcrypt+;在Linux下使用包装器libbcrypt

C++ 如何在c+中使用bcrypt+;在Linux下使用包装器libbcrypt,c++,linux,gcc,bcrypt,C++,Linux,Gcc,Bcrypt,我尝试使用bcrypt编写一个简单的登录脚本。我曾尝试使用C包装器libbcrypt库,但编译器一直在抱怨bcrypt类中对bcrypt_checkpw、bcrypt_hashpw、bcrypt_gensalt的引用未定义 我做的第一件事是按照readme.md-中的说明进行操作: 然后我有了main.cpp文件 #include <iostream> #include "User_Class.hpp" void checkPermission(); int main(int a

我尝试使用bcrypt编写一个简单的登录脚本。我曾尝试使用C包装器libbcrypt库,但编译器一直在抱怨bcrypt类中对bcrypt_checkpw、bcrypt_hashpw、bcrypt_gensalt的引用未定义

我做的第一件事是按照readme.md-中的说明进行操作:

然后我有了main.cpp文件

#include <iostream>
#include "User_Class.hpp"

void checkPermission();

int main(int argc, char* argv[]) {    
    checkPermission();
    return 0;
}

void checkPermission() {
    User_Class User;
    User.Login("test");
}
我的密码\u Class.cpp文件

#include <iostream>
#include "Password_Class.hpp"
#include "User_Class.hpp"

bool User_Class::Login(std::string password) {
    return Password_Class::authenticate(password);
}
#include <iostream>
#include "Password_Class.hpp"
#include "bcrypt/BCrypt.hpp"

bool Password_Class::authenticate(std::string password) {

    // this fails!
    std::string hash = BCrypt::generateHash(password);  
    std::cout << BCrypt::validatePassword(password,hash) << std::endl;

    return true;

}
使用此命令编译时

g++ -lbcrypt main.cpp User_Class.cpp Password_Class.cpp -o main `pkg-config --libs --cflags gtkmm-3.0`
我会犯错误

/tmp/ccc3Va1h.o: In Funktion »BCrypt::generateHash(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)«:
Password_Class.cpp:(.text._ZN6BCrypt12generateHashERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi[_ZN6BCrypt12generateHashERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi]+0x44): Warnung: undefinierter Verweis auf »bcrypt_gensalt«
Password_Class.cpp:(.text._ZN6BCrypt12generateHashERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi[_ZN6BCrypt12generateHashERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi]+0xb0): Warnung: undefinierter Verweis auf »bcrypt_hashpw«
/tmp/ccc3Va1h.o: In Funktion »BCrypt::validatePassword(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)«:
Password_Class.cpp:(.text._ZN6BCrypt16validatePasswordERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_[_ZN6BCrypt16validatePasswordERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_]+0x33): Warnung: undefinierter Verweis auf »bcrypt_checkpw«
collect2: error: ld returned 1 exit status

/tmp/ccc3Va1h.o:In Funktion»BCrypt::generateHash(std::uuucx11::basic_ustring const&,int)«:
密码\u Class.cpp:(.text.\u zn6crypt12generatehasherknst7\u cx1112基本字符串t11char\u traitsaiceeei[\u zn6crypt12generatehasherknst7\u cx1112基本字符串t11char\u traitsaiceeei]+0x44):警告:未定义的Verweis auf»bcrypt\u gensalt«
密码\u Class.cpp:(.text.\u zn6crypt12generatehasherknst7\uuu cx1112基本字符串t11char\u traitsaiceeei[\u zn6crypt12generatehasherknst7\uuuucx1112基本字符串t11char\u traitsaiceeei]+0xb0):警告:未定义Verweis auf»bcrypt\u hashpw«
/tmp/ccc3Va1h.o:In-Funktion»BCrypt::validatePassword(标准::uu cxx11::basic_u字符串常量&,标准::uu cxx11::basic_u字符串常量&)«:
密码类.cpp:(.text. zn6crypt16validatePassworderknst7_uuucx1112基本字符串t11char_traitssiceees7_uzn6crypt16validatePassworderknst7_uucx1112基本字符串t11char_traitssiceees7_412;+0x33):警告:未定义的Verweis auf»bcrypt»checkpw«
collect2:错误:ld返回了1个退出状态
有人能告诉我这是怎么回事吗?我做了什么错事,我如何在C++中使用BCREPT?我想有些图书馆找不到,但我在Linux或C++方面真的没有专家,所以请原谅我。p>
谢谢你的帮助

-lbrypt
标志放在命令行上的
cpp
文件之后。链接器标志/源文件的顺序很重要。(我并不是说这最终解决了问题。)事实上,这就是问题所在。非常感谢你!我一直在寻找答案。顺致敬意,很复杂的魔兽世界的复制品。我得调查一下。非常感谢。编辑:tbh我真的不知道编译器是如何工作的。我所做的只是复制意大利面,很高兴我能够基于一个1文件示例编译所有文件。我真的得看看那里发生了什么。你可能想通读一遍,然后点击其他相关问题。这应该会给你一个大致的概述,尽管细节确实非常复杂,并且依赖于编译器。A还应解释基本思想。
class Password_Class {
    public:
        static bool authenticate(Glib::ustring password);
};
g++ -lbcrypt main.cpp User_Class.cpp Password_Class.cpp -o main `pkg-config --libs --cflags gtkmm-3.0`
/tmp/ccc3Va1h.o: In Funktion »BCrypt::generateHash(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)«:
Password_Class.cpp:(.text._ZN6BCrypt12generateHashERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi[_ZN6BCrypt12generateHashERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi]+0x44): Warnung: undefinierter Verweis auf »bcrypt_gensalt«
Password_Class.cpp:(.text._ZN6BCrypt12generateHashERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi[_ZN6BCrypt12generateHashERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEi]+0xb0): Warnung: undefinierter Verweis auf »bcrypt_hashpw«
/tmp/ccc3Va1h.o: In Funktion »BCrypt::validatePassword(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)«:
Password_Class.cpp:(.text._ZN6BCrypt16validatePasswordERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_[_ZN6BCrypt16validatePasswordERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_]+0x33): Warnung: undefinierter Verweis auf »bcrypt_checkpw«
collect2: error: ld returned 1 exit status