正确使用fplll作为c++库

wh6knrhe  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(118)

我试图在我的c++程序中使用fplll库的bkz_reduction函数,但是,我总是得到一个“undefined reference to `fplll::bkz_reduction(fplll::ZZ_mat<__mpz_struct [1]>&,int,int,fplll::FloatType,int”错误。
安装:我下载并安装了fplll,如git(https://github.com/fplll/fplll/tree/master)中所述,在我的wsl 2 Ubuntu 22.04.3(主机:Windows 11)。它现在位于/home/my_username/fplll下。当运行git中包含的test_bkz时,根本没有问题。
我想要的是:我有一个文件test_stuff.cpp,其中包含bkz_reduction函数的调用:

...
#include <cstring>
#include <cstdlib>
#include <fplll.h>

using namespace std;
using namespace fplll;

int main()
{
    ...
    ZZ_mat<mpz_t> fplll_mat;
    fplll_mat = //gets set to some other value;

    int status = 0;
    status = bkz_reduction(fplll_mat, 10, BKZ_DEFAULT, FT_DEFAULT, 0);

    return 0;
}

另外,我有一个Makefile,

CFLAGS = -Wall -Wextra -march=native -mtune=native -O3 -fomit-frame-pointer
CXX = g++
CXXFLAGS = $(CFLAGS) -std=c++0x

test_stuff: tests/test_stuff.cpp
    $(CXX) $(CXXFLAGS) tests/test_stuff.cpp -o tests/test_stuff -lmpfr -lgmp

调用“make test_stuff”会产生上面提到的“undefined reference to `fplll::bkz_reduction(fplll::ZZ_mat<__mpz_struct [1]>&,int,int,fplll::FloatType,int n”“错误。
我已经仔细检查了函数的正确输入参数,并且所需的类型匹配。我的VSCode在找到bkz_reduction函数时没有遇到任何麻烦,并且对函数调用也没有异议。
在阅读了不同的互联网内容后,我认为我没有正确地将fplll库链接到我的test_stuff程序,然而,我对链接的了解非常有限。我试图理解官方fplll-git仓库中test_bkz的Makefile,但不幸的是,它对初学者来说太复杂了。
我将感谢任何帮助或建议尝试什么。看到一个正确运行的例子也很好,我发现的任何东西都使用了python版本的fpylll来访问fpylll函数。

fd3cxomn

fd3cxomn1#

你似乎根本没有告诉链接器与fplll链接。幸运的是,这个库提供了一个pkg-config文件,所以你可以向pkg-config请求标志:

test_stuff: tests/test_stuff.cpp
    $(CXX) $(CXXFLAGS) tests/test_stuff.cpp -o tests/test_stuff -lmpfr -lgmp `pkg-config --libs fplll`

相关问题