我试图在我的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函数。
1条答案
按热度按时间fd3cxomn1#
你似乎根本没有告诉链接器与fplll链接。幸运的是,这个库提供了一个pkg-config文件,所以你可以向
pkg-config
请求标志: