首页 > 解决方案 > OpenABE C++ 库:未定义的引用错误

问题描述

我已成功安装 OpenABE 库 - https://github.com/zeutro/openabe

但是当我尝试编译自己的程序或运行示例时 - https://github.com/zeutro/openabe/blob/master/examples/test_cp.cpp

g++ 测试.cpp

我得到错误:

/tmp/ccAcWSoq.o: 在函数main': test.cpp:(.text+0x29): undefined reference tooabe::InitializeOpenABE()' test.cpp:(.text+0x6a): 未定义引用oabe::OpenABECryptoContext::OpenABECryptoContext(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool)' test.cpp:(.text+0xea): undefined reference tooabe::OpenABECryptoContext::generateParams()' test.cpp:(.text+0x1bf) : 未定义对oabe::OpenABECryptoContext::keygen(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&, 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&)' test.cpp:(.text+0x27b): undefined reference tooabe::OpenABECryptoContext::encrypt(std::__cxx11::basic_string, std::allocator >, std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std ::allocator >&)' test.cpp:(.text+0x2dd): undefined reference to oabe::OpenABECryptoContext::decrypt(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&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&)' test.cpp:(.text+0x385): undefined reference tooabe::ShutdownOpenABE()' /tmp/ccAcWSoq.o: In function oabe::OpenABECryptoContext::~OpenABECryptoContext()': test.cpp:(.text._ZN4oabe20OpenABECryptoContextD2Ev[_ZN4oabe20OpenABECryptoContextD5Ev]+0xf): undefined reference tovtable for oabe::OpenABECryptoContext' collect2: error: ld returned 1 退出状态

这是代码 - test.cpp

#include <iostream>
#include <string>
#include <cassert>

#include <openabe/openabe.h>
#include <openabe/zsymcrypto.h>



using namespace std;
using namespace oabe;
using namespace oabe::crypto;




int main(int argc, char **argv){

    InitializeOpenABE();

    OpenABECryptoContext cpabe("CP-ABE");

    string ct, pt1 = "plaintext", pt2;

    cpabe.generateParams();

    cpabe.keygen("|attr1|attr2","key0");

    cpabe.encrypt("attr1 and attr2",pt1,ct);

    bool result =  cpabe.decrypt("key0",ct,pt2);


    assert(result && pt1 == pt2);

    cout << "Message: " << pt2 << endl;

    ShutdownOpenABE();

    return 0;

}

我什至可以正确编译文件吗?或者是否还有其他我似乎无法识别的问题?

标签: c++

解决方案


推荐阅读