GithubHelp home page GithubHelp logo

intel / he-toolkit Goto Github PK

View Code? Open in Web Editor NEW
113.0 9.0 23.0 2.59 MB

The Intel Homomorphic Encryption (HE) toolkit is the primordial vehicle for the continuous distribution of the Intel HE technological innovation to users. The toolkit has been designed with usability in mind and to make it easier for users to evaluate and deploy homomorphic encryption technology on the Intel platforms.

Home Page: https://software.intel.com/content/www/us/en/develop/tools/homomorphic-encryption.html#gs.2z7ahg

License: Apache License 2.0

CMake 1.42% Shell 0.41% C++ 31.14% Jupyter Notebook 1.37% Python 29.78% TeX 35.87%
homomorphic-encryption he-toolkit cryptography security security-tools encryption-algorithms privacy-enhancing-technologies research-tool

he-toolkit's Introduction

Intel Homomorphic Encryption Toolkit

Build and Test

Intel Homomorphic Encryption (HE) Toolkit is Intel's primary platform for delivering innovation around HE with the aim of providing both the community and industry with an intuitive entry point for Experimentation, Development and Deployment of HE applications. Intel HE Toolkit currently offers sample kernels and example programs that demonstrate varying operations and applications that can be built leveraging three major HE libraries Microsoft SEAL, PALISADE, and HElib. Moreover, Intel HE Toolkit demonstrates the advantages of using Intel® Processors through libraries such as the Intel HE Acceleration Library to utilize the latest Intel hardware features.

Contents

Quick Start

Want to get up and running quickly with Intel HE toolkit? Then follow our Quick Start guide.

Dependencies

Intel HE toolkit has been tested on Ubuntu 22.04

Must have system dependencies for the toolkit include,

python >= 3.10
pip
git

Further Python dependencies include,

toml
argcomplete (optional: tab completion)
docker      (optional: building docker containers)
pytest      (optional: running tests)
pytest-mock (optional: running tests)

For faster setup, a requirements.txt file is provided for recommended user python dependencies and a dev_reqs.txt is provided for all python dependencies listed above and pre-commit tools for development. Either file can install dependencies with

pip install -r <requirements-file>

However, to build anything useful with the toolkit, we recommend to additionally install the following system dependencies,

m4
patchelf
cmake >= 3.22
g++ == 11.x or clang == 14.x
pthread
virtualenv (optional if building the Logistic Regression Example)
autoconf   (optional if using PALISADE)
gmp == 1.5.x  (optional if using HElib)

Setup

To set up the toolkit users must first initialize the hekit command using

git clone https://github.com/intel/he-toolkit.git
cd he-toolkit
./hekit init --default-config

This will create a directory ~/.hekit in the user's home directory and create the default.config, or other user specified config file to this location. This directory will be where all components built and installed by hekit will be kept.

Moreover, the hekit command will be added to the user's PATH so as to enable the user to call the command from anywhere on their system. This modifies your shell's initialization script (currently only in bash).

Intel HE toolkit is primarily accessible through the hekit command. There are currently two ways of interacting with the toolkit: through a Docker build or directly on your system.

The hekit command

The hekit command is a command-line tool that can be used by the user to easily set up an HE environment in a configurable and intuitive manner.

The hekit command has a help option which lists all subcommands and flags

hekit -h

Moreover, each subcommand has a help option that can be invoked with hekit <subcommand> -h.

The hekit subcommands consist of utility commands such as check-dependencies and docker-build as well as commands for managing the fetching, building, and installation of user-defined projects using recipe files (more information found here). See the README for more detailed information on the usage of hekit.

Docker build (Recommended)

The recommended method is to use the Docker build and installation which builds the toolkit in its entirety including all HE libraries in a self-contained docker container running Ubuntu 20.04. This can be built through the hekit command

hekit docker-build

Additionally, the docker build can optionally be used via VS Code Server. See here for a detailed description on the usage and components of this build.

System build

Alternatively, one can build the toolkit's HE components using the following command

hekit install recipes/default.toml

This will build the toolkit project with the default settings. The toolkit will download and build all three HE libraries automatically with Intel HE Acceleration Library enabled.

Note: You will be responsible for installing all of the required dependencies.

The sample kernels and examples can also be built in a similar manner using

hekit build recipes/sample-kernels.toml

and

hekit build recipes/examples.toml

respectively.

To view a list of the components and their instances have been built/installed through hekit one can execute

hekit list

to list each component, their instance(s) and the status of the fetch, build, and install steps.

Kernels

Located in he-samples is a collection of software components built on Microsoft SEAL and PALISADE comprising sample kernels for operations performed homomorphically and example applications. The HE Samples are designed to enable quicker evaluation of HE on Intel platforms, serve as a learning tool for how to implement operations in different HE libraries, and provide examples of how these operations can be used to build applications based on HE technology for different use cases.

Sample kernels

The sample kernels are for complex HE operations, requiring multiple API calls such as Matrix Multiplication and Vector Dot Product. See the README for instructions.

Test sample kernels

The unit tests are a selection of unit tests meant for verifying the accuracy of the various sample kernels included in this project. See the README for more information.

Examples

The examples directory includes example applications built using HE technology. The primary purpose of these examples is to serve as a showcase of different use cases which can be implemented using HE. Moreover, these can be used as learning references and starting points for further development. The toolkit currently includes the following examples listed below.

Secure Query

The secure query example shows how it is possible to implement a key-value database using HE. This allows a client to perform lookups of values in the database without exposing the query to the server hosting the database and optionally the key-value pairs in the database as well. The secure query example is implemented using the SEAL BFV scheme. See the README for more details and instructions on how to run this program.

Logistic Regression

The transposed logistic regression example presents a scalable and fast method of logistic regression inference in HE. Using the SEAL CKKS scheme, the example will encrypt the model (bias and weight) and takes batches of encrypted data samples to perform the inference all within the HE domain. See the README for usage information.

Private Set Intersection

The Private Set Intersection (PSI) example computes the intersection of two given sets. The program computes a hash value for each entry of both the client and the server sets, then using the HElib BGV scheme, it encrypts the client set and computes the intersection, returning all the encrypted elements that are common to both sets. See the README for usage information.

New Examples

Using the hekit new command users can create example projects of their own. These can be entirely new projects or projects based on one of the provided examples listed above. For more on the usage of the hekit new command see here.

Known Issues

  • Running ./hekit init --default-config produces the error ValueError: Unknown shell 'sh' The hekit command currently only supports bash, please ensure the default shell is set to bash or alternatively set the environment variable export SHELL=/bin/bash.

  • There is a specific hardware configuration, AVX512DQ, which causes some of the PALISADE sample kernels to fail when building the HEXL library with PALISADE. This error seems independent of the HE Toolkit and is currently being investigated.

  • HE Toolkit SEAL examples currently do not work with clang-12 on ubuntu 20.04 and is under investigation.

  • HE Toolkit SEAL examples currently do not work with clang-12 and clang-13 on ubuntu 22.04 and is under investigation.

Third Party Plugins

Intel HE Toolkit provides the utilities to handle third party plugins that can be installed in the system to add new HE functionalities. See PLUGINS for details about how to interact with them or create new plugins.

Contributing

Intel HE Toolkit welcomes external contributions through pull requests to the main branch.

Please sign your commits before making a pull request. See instructions here for how to sign commits.

Before contributing, please ensure that you run pre-commit with

pre-commit install
pre-commit run --all-files

and make sure all checks pass.

Also please run

pytest tests

to make sure the tests pass.

We encourage feedback and suggestions via GitHub Issues as well as via GitHub Discussions.

Adding a New Command

The following steps allows to add a new subcommand to hekit as a command or tool. Below ACTION must be replaced by a word or set of words that described the functionality of the new command.

  • Create a new python file ACTION.py inside either the commands directory or the tools directory.

  • Create a function to set the parser of the subcommand (the subparser to hekit parser). The function must begin and end with set_ and \_subparser, respectively. Define the arguments of the command. The parameter of the function set_defaults(fn) must be set to the function defined in the next step. Check argparse for API reference information.

    def set_ACTION_subparser(subparsers):
        """create the parser for the 'ACTION' command"""
        parser_ACTION = subparsers.add_parser("ACTION", description="ADD-SUBPARSER-DESCRIPTION")
        parser_ACTION.add_argument(
            "ARG1", help="ADD-ARG-DESCRIPTION"
        )
        parser_ACTION.add_argument(
            "ARG2", help="ADD-ARG-DESCRIPTION"
        )
        parser_ACTION.set_defaults(fn=NEW_FUNCTIONALITY)
  • Create the set of functions that implement the new functionality. The entry point must be a function that has args as parameter and it will use the arguments defined in the previous step.

    def NEW_FUNCTIONALITY(args) -> None:
        """Executes new functionality"""
        if(args.ARG1):
            # code goes here
        elif(args.ARG2):
            # code goes here
  • hekit should automatically discover the function set_ACTION_subparser and enable the options of the new command.

  • Generic utilities or helper functions that can be used for several commands should be placed in utils.

Troubleshooting

  • Executable `cpplint` not found

    Make sure you install cpplint: pip install cpplint. If you install cpplint locally, make sure to add it to your PATH.

  • /bin/sh: 1: pre-commit: not found

    Install pre-commit. More info at https://pre-commit.com/.

  • When attempting to sign a commit

    error: gpg failed to sign the data
    fatal: failed to write commit object
    

    Try adding export GPG_TTY=$(tty) to your shell initializer script such as ~/.bashrc.

  • When writing recipe files, there is a known issue when chaining bash commands such as

    pre-build = "cd .. && ls"
    

    where hekit does not know how to interpret the && symbol. To resolve this issue, wrap the commands in bash -c 'command1 && command2 && ...' to produce

    pre-build = "bash -c 'cd .. && ls'"
    

Contributors

The Intel past and present contributors to this project, sorted by last name, are

he-toolkit's People

Contributors

bahattin56 avatar dencalderon avatar dependabot[bot] avatar faberga avatar fboemer avatar gurglespuge avatar hamishun avatar jlhcrawford avatar jobottle avatar kylanerace avatar mkilari1 avatar skmono avatar tgonzalez89-intel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

he-toolkit's Issues

Update README

Add HEXL to README and update description
Add README to secure-query example

Failed to build HEXL library

Version Information (Put N/A for Not Applicable)

Software Version(s)
Linux rhel fedora 8.8 kernel-5.4
Git 2.39
CMake N/A
Compiler (GCC, Clang, etc.) 8.5
Python 3.11
Doxygen N/A
HE Toolkit main 859025f
Recipe File(s) Used N/A

Describe the bug
I don't have docker in my environment repository, so I chose to build it on the system.
In the process of execution

$ hekit  install  default.toml 
hexl/1.2.3
fetch
build
cwd: /home/along/.hekit/components/hexl/1.2.3/build
pre-build
cmake -S /home/along/.hekit/components/hexl/1.2.3/fetch/hexl -B /home/along/.hekit/components/hexl/1.2.3/build
               -DCMAKE_INSTALL_PREFIX=/home/along/.hekit/components/hexl/1.2.3/install
Error while running subcommand
 FileNotFoundError(2, 'No such file or directory')

I can't understand why he came into being. is it the problem of the hexl project?
I saw a known problem mentioned in the readme file.
So I took a look at the supported instruction set.

$ cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 85
model name	: Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz
stepping	: 5
microcode	: 0x1
cpu MHz		: 2500.000
cache size	: 36608 KB
physical id	: 0
siblings	: 2
core id		: 0
cpu cores	: 2
apicid		: 0
initial apicid	: 0
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat avx512_vnni
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa itlb_multihit
bogomips	: 5000.00
clflush size	: 64
cache_alignment	: 64
address sizes	: 46 bits physical, 48 bits virtual
power management:

processor	: 1
vendor_id	: GenuineIntel
cpu family	: 6
model		: 85
model name	: Intel(R) Xeon(R) Platinum 8255C CPU @ 2.50GHz
stepping	: 5
microcode	: 0x1
cpu MHz		: 2500.000
cache size	: 36608 KB
physical id	: 0
siblings	: 2
core id		: 1
cpu cores	: 2
apicid		: 1
initial apicid	: 1
fpu		: yes
fpu_exception	: yes
cpuid level	: 13
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single pti fsgsbase bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 arat avx512_vnni
bugs		: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa itlb_multihit
bogomips	: 5000.00
clflush size	: 64
cache_alignment	: 64
address sizes	: 46 bits physical, 48 bits virtual
power management:

It contains the AVX512DQ you mentioned, and I can't confirm whether it is consistent with the known problem.

So I need some help, if you need any other environmental information, please contact me.

Consistent file naming convention

We have clashing file naming conventions (e.g. palisade_ckks_micro.cpp and seal_micro_CKKS.cpp) which makes searching for files a minor annoyance.

gmp.h missing

While running 'hekit install recipes/default.toml', i get following error. How do I fix it?

[BASH] sh MakeCheckFeatures "ALIGNED_ARRAY BUILTIN_CLZL LL_TYPE SSSE3 AVX PCLMUL AVX2 FMA AVX512F COPY_TRAITS1 COPY_TRAITS2 CHRONO_TIME MACOS_TIME POSIX_TIME AES_NI KMA" "g++ -I../include -I. -g -O2 -pthread -march=native " "-lm"
[BASH] *** Checking for feature: ALIGNED_ARRAY [yes]
[BASH] *** Checking for feature: BUILTIN_CLZL [yes]
[BASH] *** Checking for feature: LL_TYPE [yes]
[BASH] *** Checking for feature: SSSE3 [yes]
[BASH] *** Checking for feature: AVX [no]
[BASH] *** Checking for feature: PCLMUL [no]
[BASH] *** Checking for feature: AVX2 [no]
[BASH] *** Checking for feature: FMA [no]
[BASH] *** Checking for feature: AVX512F [no]
[BASH] *** Checking for feature: COPY_TRAITS1 [yes]
[BASH] *** Checking for feature: COPY_TRAITS2 [yes]
[BASH] *** Checking for feature: CHRONO_TIME [yes]
[BASH] *** Checking for feature: MACOS_TIME [no]
[BASH] *** Checking for feature: POSIX_TIME [yes]
[BASH] *** Checking for feature: AES_NI [no]
[BASH] *** Checking for feature: KMA [no]
[BASH] make[1]: Leaving directory '/home/sandeep/.hekit/components/ntl/11.5.1/build/ntl-11.5.1/src'
[BASH] make setup3
[BASH] make[1]: Entering directory '/home/sandeep/.hekit/components/ntl/11.5.1/build/ntl-11.5.1/src'
[BASH] g++ -I../include -I. -g -O2 -pthread -march=native -o gen_gmp_aux gen_gmp_aux.cpp -lgmp -lm
[BASH] gen_gmp_aux.cpp:29:10: fatal error: gmp.h: No such file or directory
[BASH] 29 | #include <gmp.h>
[BASH] | ^~~~~~~
[BASH] compilation terminated.
[BASH] make[1]: *** [makefile:360: setup3] Error 1
[BASH] make[1]: Leaving directory '/home/sandeep/.hekit/components/ntl/11.5.1/build/ntl-11.5.1/src'
[BASH] make: *** [makefile:327: setup-phase] Error 2
Error while running subcommand
BuildError("Function 'build' failed to execute external process")

==================
Tried installing gmp - which error'ed too

sandeep@sandeep-VirtualBox:~/he-toolkit$ sudo apt install gmp
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package gmp

Use a stable version of Google Benchmark

Build fails because of updates in the main branch of Google Benchmark.
In file he-samples/cmake/gbenchmark.cmake, change GBENCHMARK_GIT_TAG from main to a stable release. v1.5.6. works.

Here is the exact error when installing gbenchmark:

[100%] Built target benchmark_main
[ 35%] Performing install step for 'ext_gbenchmark'
-- Performing Test HAVE_CXX_FLAG_WSHORTEN_64_TO_32 - Failed
-- Performing Test HAVE_CXX_FLAG_FSTRICT_ALIASING
[ 90%] Built target benchmark
[100%] Built target benchmark_main
Install the project...
-- Install configuration: "Release"
-- Installing: /home/user/he-toolkit/he-samples/build/lib/libbenchmark.a
-- Installing: /home/user/he-toolkit/he-samples/build/lib/libbenchmark_main.a
-- Installing: /home/user/he-toolkit/he-samples/build/include/benchmark
-- Installing: /home/user/he-toolkit/he-samples/build/include/benchmark/benchmark.h
-- Installing: /home/user/he-toolkit/he-samples/build/lib/cmake/benchmark/benchmarkConfig.cmake
-- Installing: /home/user/he-toolkit/he-samples/build/lib/cmake/benchmark/benchmarkConfigVersion.cmake
-- Installing: /home/user/he-toolkit/he-samples/build/lib/pkgconfig/benchmark.pc
-- Installing: /home/user/he-toolkit/he-samples/build/lib/cmake/benchmark/benchmarkTargets.cmake
-- Installing: /home/user/he-toolkit/he-samples/build/lib/cmake/benchmark/benchmarkTargets-release.cmake
-- Installing: /usr/local/share/doc/benchmark
CMake Error at src/cmake_install.cmake:152 (file):
  file INSTALL cannot make directory "/usr/local/share/doc/benchmark": No
  such file or directory.
Call Stack (most recent call first):
  cmake_install.cmake:47 (include)


make[3]: *** [install] Error 1
make[2]: *** [ext_gbenchmark/src/ext_gbenchmark-stamp/ext_gbenchmark-install] Error 2
make[1]: *** [CMakeFiles/ext_gbenchmark.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

HE-Toolkit does not compile with gcc 12

HE-Toolkit compilation fails in Palisade compilation when using GCC 12.1.0.

In static member function ‘static lbcrypto::PRNG& lbcrypto::PseudoRandomNumberGenerator::GetPRNG()’:
/HE-Toolkit/he-toolkit/he-samples/build/ext_palisade/src/ext_palisade/src/core/include/math/distributiongenerator.h:124:18: error: pointer ‘mem’ used after ‘void free(void*)’ [-Werror=use-after-free]
124 | uint32_t counter = reinterpret_cast(mem);
| ^~~~~~~
/HE-Toolkit/he-toolkit/he-samples/build/ext_palisade/src/ext_palisade/src/core/include/math/distributiongenerator.h:123:13: note: call to ‘void free(void*)’ here
123 | free(mem);

Can't find toolkit-path when "hekit build"

I setup build environment according to readme and then I tried to run "hekit build recipes/examples.toml". It prompts "Please enter toolkit-path: ", error "Error while running subcommand FileNotFoundError(2, 'No such file or directory')" after I entered the correct he-toolkit path. And I notice that in example.toml, there is a variable of "!toolkit-path!". Should I set it somewhere beforehand?

build error: ‘numeric_limits’ is not a member of ‘std’

Build env:
gcc: 11.1.0
g++: 11.1.0
cmake: 3.21.0

Error message:
he-toolkit/he-samples/build/ext_palisade/src/ext_palisade/third-party/google-benchmark/src/benchmark_register.h:22:30: error: ‘numeric_limits’ is not a member of ‘std’
22 | static const T kmax = std::numeric_limits::max();

After including the header of , this build issue was fixed.

Add CI test for examples

Add extra test cases for GitHub Actions CI:

  • secure-query example
  • logistic regression example (requires PR merge first)

Fails to compile when setting SEAL_SHARED_LIB=ON

If I modify this line and set SEAL_SHARED_LIB from OFF to ON the compilation fails.

set(SEAL_SHARED_LIB OFF) # Set to ON/OFF to toggle shared build

CMakeFiles/secure-query.dir/src/main.cpp.o: In function `sq::encryptDatabase(std::vector<DatabaseEntry, std::allocator<DatabaseEntry> > const&, seal::Encryptor const*, int, unsigned long) [clone ._omp_fn.0]':
main.cpp:(.text+0x2e9): undefined reference to `seal::parms_id_zero'
main.cpp:(.text+0x2fb): undefined reference to `seal::parms_id_zero'
main.cpp:(.text+0x42d): undefined reference to `seal::parms_id_zero'
main.cpp:(.text+0x4e1): undefined reference to `seal::parms_id_zero'
main.cpp:(.text+0x57a): undefined reference to `seal::parms_id_zero'
CMakeFiles/secure-query.dir/src/main.cpp.o:main.cpp:(.text+0x588): more undefined references to `seal::parms_id_zero' follow
CMakeFiles/secure-query.dir/src/main.cpp.o: In function `sq::encryptDatabase(std::vector<DatabaseEntry, std::allocator<DatabaseEntry> > const&, seal::Encryptor const*, int, unsigned long) [clone ._omp_fn.0]':
main.cpp:(.text+0x88a): undefined reference to `seal::Encryptor::encrypt_internal(seal::Plaintext const&, bool, bool, seal::Ciphertext&, seal::MemoryPoolHandle) const'
main.cpp:(.text+0x99e): undefined reference to `seal::Encryptor::encrypt_internal(seal::Plaintext const&, bool, bool, seal::Ciphertext&, seal::MemoryPoolHandle) const'
main.cpp:(.text+0xb62): undefined reference to `seal::Encryptor::encrypt_zero_internal(std::array<unsigned long, 4ul>, bool, bool, seal::Ciphertext&, seal::MemoryPoolHandle) const'
main.cpp:(.text+0xcfb): undefined reference to `seal::Encryptor::encrypt_zero_internal(std::array<unsigned long, 4ul>, bool, bool, seal::Ciphertext&, seal::MemoryPoolHandle) const'
main.cpp:(.text+0x1a99): undefined reference to `seal::parms_id_zero'
main.cpp:(.text+0x1aa3): undefined reference to `seal::parms_id_zero'
main.cpp:(.text+0x1b29): undefined reference to `seal::parms_id_zero'
main.cpp:(.text+0x1b30): undefined reference to `seal::parms_id_zero'
main.cpp:(.text+0x1b51): undefined reference to `seal::parms_id_zero'
CMakeFiles/secure-query.dir/src/main.cpp.o:main.cpp:(.text+0x1b58): more undefined references to `seal::parms_id_zero' follow
CMakeFiles/secure-query.dir/src/main.cpp.o: In function `sq::encryptDatabase(std::vector<DatabaseEntry, std::allocator<DatabaseEntry> > const&, seal::Encryptor const*, int, unsigned long) [clone ._omp_fn.0]':
main.cpp:(.text+0x1c86): undefined reference to `seal::Encryptor::encrypt_internal(seal::Plaintext const&, bool, bool, seal::Ciphertext&, seal::MemoryPoolHandle) const'
CMakeFiles/secure-query.dir/src/main.cpp.o: In function `seal::MMProfGlobal::get_pool(unsigned long)':
main.cpp:(.text._ZN4seal12MMProfGlobal8get_poolEm[_ZN4seal12MMProfGlobal8get_poolEm]+0x3): undefined reference to `seal::util::global_variables::global_memory_pool'
main.cpp:(.text._ZN4seal12MMProfGlobal8get_poolEm[_ZN4seal12MMProfGlobal8get_poolEm]+0xe): undefined reference to `seal::util::global_variables::global_memory_pool'
CMakeFiles/secure-query.dir/src/main.cpp.o: In function `std::vector<seal::Ciphertext, std::allocator<seal::Ciphertext> >::_M_default_append(unsigned long)':
main.cpp:(.text._ZNSt6vectorIN4seal10CiphertextESaIS1_EE17_M_default_appendEm[_ZNSt6vectorIN4seal10CiphertextESaIS1_EE17_M_default_appendEm]+0xfb): undefined reference to `seal::parms_id_zero'
main.cpp:(.text._ZNSt6vectorIN4seal10CiphertextESaIS1_EE17_M_default_appendEm[_ZNSt6vectorIN4seal10CiphertextESaIS1_EE17_M_default_appendEm]+0x10d): undefined reference to `seal::parms_id_zero'
main.cpp:(.text._ZNSt6vectorIN4seal10CiphertextESaIS1_EE17_M_default_appendEm[_ZNSt6vectorIN4seal10CiphertextESaIS1_EE17_M_default_appendEm]+0x207): undefined reference to `seal::parms_id_zero'
main.cpp:(.text._ZNSt6vectorIN4seal10CiphertextESaIS1_EE17_M_default_appendEm[_ZNSt6vectorIN4seal10CiphertextESaIS1_EE17_M_default_appendEm]+0x215): undefined reference to `seal::parms_id_zero'
CMakeFiles/secure-query.dir/src/sqclient.cpp.o: In function `SQClient::SQClient()':
sqclient.cpp:(.text+0x2a9): undefined reference to `seal::Modulus::set_value(unsigned long)'
sqclient.cpp:(.text+0x2b3): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x2c0): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x2d5): undefined reference to `seal::EncryptionParameters::compute_parms_id()'
CMakeFiles/secure-query.dir/src/sqclient.cpp.o: In function `SQClient::initializeSealContext(unsigned long, unsigned long, std::vector<seal::Modulus, std::allocator<seal::Modulus> >)':
sqclient.cpp:(.text+0x676): undefined reference to `seal::Modulus::set_value(unsigned long)'
sqclient.cpp:(.text+0x680): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x68d): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x6a4): undefined reference to `seal::EncryptionParameters::compute_parms_id()'
sqclient.cpp:(.text+0x6c1): undefined reference to `seal::EncryptionParameters::compute_parms_id()'
sqclient.cpp:(.text+0x6fd): undefined reference to `seal::EncryptionParameters::compute_parms_id()'
sqclient.cpp:(.text+0x73c): undefined reference to `seal::Modulus::set_value(unsigned long)'
sqclient.cpp:(.text+0x79d): undefined reference to `seal::EncryptionParameters::compute_parms_id()'
sqclient.cpp:(.text+0x9fe): undefined reference to `seal::SEALContext::SEALContext(seal::EncryptionParameters, bool, seal::sec_level_type, seal::MemoryPoolHandle)'
sqclient.cpp:(.text+0xc0e): undefined reference to `seal::KeyGenerator::KeyGenerator(seal::SEALContext const&)'
sqclient.cpp:(.text+0xc72): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0xc84): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0xced): undefined reference to `seal::KeyGenerator::generate_pk(bool) const'
sqclient.cpp:(.text+0xe70): undefined reference to `seal::KeyGenerator::secret_key() const'
sqclient.cpp:(.text+0xeaa): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0xebf): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0xec9): undefined reference to `vtable for seal::util::MemoryPoolMT'
sqclient.cpp:(.text+0xfef): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x1008): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x103e): undefined reference to `seal::Encryptor::Encryptor(seal::SEALContext const&, seal::PublicKey const&)'
sqclient.cpp:(.text+0x1064): undefined reference to `seal::Decryptor::Decryptor(seal::SEALContext const&, seal::SecretKey const&)'
sqclient.cpp:(.text+0x17c6): undefined reference to `seal::CoeffModulus::BFVDefault(unsigned long, seal::sec_level_type)'
CMakeFiles/secure-query.dir/src/sqclient.cpp.o: In function `SQClient::encodeStringQuery(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
sqclient.cpp:(.text+0x1aa7): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x1abf): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x1b5a): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x1b6c): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x1bc0): undefined reference to `seal::parms_id_zero'
CMakeFiles/secure-query.dir/src/sqclient.cpp.o:sqclient.cpp:(.text+0x1be0): more undefined references to `seal::parms_id_zero' follow
CMakeFiles/secure-query.dir/src/sqclient.cpp.o: In function `SQClient::encodeStringQuery(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
sqclient.cpp:(.text+0x1e6e): undefined reference to `seal::Encryptor::encrypt_internal(seal::Plaintext const&, bool, bool, seal::Ciphertext&, seal::MemoryPoolHandle) const'
sqclient.cpp:(.text+0x1f8d): undefined reference to `seal::Encryptor::encrypt_internal(seal::Plaintext const&, bool, bool, seal::Ciphertext&, seal::MemoryPoolHandle) const'
sqclient.cpp:(.text+0x21f4): undefined reference to `seal::Encryptor::encrypt_zero_internal(std::array<unsigned long, 4ul>, bool, bool, seal::Ciphertext&, seal::MemoryPoolHandle) const'
sqclient.cpp:(.text+0x238a): undefined reference to `seal::Encryptor::encrypt_zero_internal(std::array<unsigned long, 4ul>, bool, bool, seal::Ciphertext&, seal::MemoryPoolHandle) const'
CMakeFiles/secure-query.dir/src/sqclient.cpp.o: In function `SQClient::isKeyLengthValid(int)':
sqclient.cpp:(.text+0x34df): undefined reference to `seal::KeyGenerator::KeyGenerator(seal::SEALContext const&)'
sqclient.cpp:(.text+0x352b): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x3546): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x35bb): undefined reference to `seal::KeyGenerator::generate_pk(bool) const'
sqclient.cpp:(.text+0x371c): undefined reference to `seal::KeyGenerator::secret_key() const'
sqclient.cpp:(.text+0x3756): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x3770): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x377a): undefined reference to `vtable for seal::util::MemoryPoolMT'
sqclient.cpp:(.text+0x38ab): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x38b5): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x390b): undefined reference to `seal::Encryptor::Encryptor(seal::SEALContext const&, seal::PublicKey const&)'
sqclient.cpp:(.text+0x3938): undefined reference to `seal::Evaluator::Evaluator(seal::SEALContext const&)'
sqclient.cpp:(.text+0x3961): undefined reference to `seal::Decryptor::Decryptor(seal::SEALContext const&, seal::SecretKey const&)'
sqclient.cpp:(.text+0x399e): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x39a8): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x3a5f): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x3a69): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x3bdc): undefined reference to `seal::Encryptor::encrypt_zero_internal(std::array<unsigned long, 4ul>, bool, bool, seal::Ciphertext&, seal::MemoryPoolHandle) const'
sqclient.cpp:(.text+0x3ce5): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x3cef): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x3e46): undefined reference to `seal::Encryptor::encrypt_zero_internal(std::array<unsigned long, 4ul>, bool, bool, seal::Ciphertext&, seal::MemoryPoolHandle) const'
sqclient.cpp:(.text+0x4087): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x4099): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x41d6): undefined reference to `seal::Encryptor::encrypt_zero_internal(std::array<unsigned long, 4ul>, bool, bool, seal::Ciphertext&, seal::MemoryPoolHandle) const'
sqclient.cpp:(.text+0x429d): undefined reference to `seal::Evaluator::sub_inplace(seal::Ciphertext&, seal::Ciphertext const&) const'
sqclient.cpp:(.text+0x42f1): undefined reference to `seal::Evaluator::exponentiate_inplace(seal::Ciphertext&, unsigned long, seal::RelinKeys const&, seal::MemoryPoolHandle) const'
sqclient.cpp:(.text+0x4342): undefined reference to `seal::Evaluator::negate_inplace(seal::Ciphertext&) const'
sqclient.cpp:(.text+0x435f): undefined reference to `seal::Evaluator::add_inplace(seal::Ciphertext&, seal::Ciphertext const&) const'
sqclient.cpp:(.text+0x4be3): undefined reference to `seal::Evaluator::multiply_many(std::vector<seal::Ciphertext, std::allocator<seal::Ciphertext> > const&, seal::RelinKeys const&, seal::Ciphertext&, seal::MemoryPoolHandle) const'
sqclient.cpp:(.text+0x4c03): undefined reference to `seal::Decryptor::invariant_noise_budget(seal::Ciphertext const&)'
CMakeFiles/secure-query.dir/src/sqclient.cpp.o: In function `SQClient::initializeSealContextInteractive()':
sqclient.cpp:(.text+0x57fe): undefined reference to `seal::Modulus::set_value(unsigned long)'
sqclient.cpp:(.text+0x5808): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x5815): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x582a): undefined reference to `seal::EncryptionParameters::compute_parms_id()'
sqclient.cpp:(.text+0x5874): undefined reference to `seal::EncryptionParameters::compute_parms_id()'
sqclient.cpp:(.text+0x58ab): undefined reference to `seal::CoeffModulus::BFVDefault(unsigned long, seal::sec_level_type)'
sqclient.cpp:(.text+0x58ed): undefined reference to `seal::EncryptionParameters::compute_parms_id()'
sqclient.cpp:(.text+0x594b): undefined reference to `seal::Modulus::set_value(unsigned long)'
sqclient.cpp:(.text+0x59af): undefined reference to `seal::EncryptionParameters::compute_parms_id()'
sqclient.cpp:(.text+0x5bfc): undefined reference to `seal::SEALContext::SEALContext(seal::EncryptionParameters, bool, seal::sec_level_type, seal::MemoryPoolHandle)'
sqclient.cpp:(.text+0x60e9): undefined reference to `seal::KeyGenerator::KeyGenerator(seal::SEALContext const&)'
sqclient.cpp:(.text+0x6139): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x6163): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x61d8): undefined reference to `seal::KeyGenerator::generate_pk(bool) const'
sqclient.cpp:(.text+0x6338): undefined reference to `seal::KeyGenerator::secret_key() const'
sqclient.cpp:(.text+0x6372): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x638c): undefined reference to `vtable for seal::util::MemoryPoolMT'
sqclient.cpp:(.text+0x63a7): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x64c8): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x64e9): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x651e): undefined reference to `seal::Encryptor::Encryptor(seal::SEALContext const&, seal::PublicKey const&)'
sqclient.cpp:(.text+0x654e): undefined reference to `seal::Decryptor::Decryptor(seal::SEALContext const&, seal::SecretKey const&)'
CMakeFiles/secure-query.dir/src/sqclient.cpp.o: In function `SQClient::decodeToString[abi:cxx11](seal::Ciphertext)':
sqclient.cpp:(.text+0x6f55): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x6f5f): undefined reference to `seal::parms_id_zero'
sqclient.cpp:(.text+0x6fd0): undefined reference to `seal::Decryptor::decrypt(seal::Ciphertext const&, seal::Plaintext&)'
CMakeFiles/secure-query.dir/src/sqclient.cpp.o: In function `seal::KeyGenerator::create_relin_keys(seal::RelinKeys&)':
sqclient.cpp:(.text._ZN4seal12KeyGenerator17create_relin_keysERNS_9RelinKeysE[_ZN4seal12KeyGenerator17create_relin_keysERNS_9RelinKeysE]+0x24): undefined reference to `seal::KeyGenerator::create_relin_keys(unsigned long, bool)'
CMakeFiles/secure-query.dir/src/sqserver.cpp.o: In function `SQServer::setPublicKey(seal::PublicKey const&)':
sqserver.cpp:(.text+0x15): undefined reference to `seal::Ciphertext::operator=(seal::Ciphertext const&)'
sqserver.cpp:(.text+0x3a): undefined reference to `seal::Encryptor::Encryptor(seal::SEALContext const&, seal::PublicKey const&)'
CMakeFiles/secure-query.dir/src/sqserver.cpp.o: In function `SQServer::initializeSealContext(unsigned long, unsigned long)':
sqserver.cpp:(.text+0x13f): undefined reference to `seal::Modulus::set_value(unsigned long)'
sqserver.cpp:(.text+0x149): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x156): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x16d): undefined reference to `seal::EncryptionParameters::compute_parms_id()'
sqserver.cpp:(.text+0x18a): undefined reference to `seal::EncryptionParameters::compute_parms_id()'
sqserver.cpp:(.text+0x1a2): undefined reference to `seal::CoeffModulus::BFVDefault(unsigned long, seal::sec_level_type)'
sqserver.cpp:(.text+0x1de): undefined reference to `seal::EncryptionParameters::compute_parms_id()'
sqserver.cpp:(.text+0x22f): undefined reference to `seal::Modulus::set_value(unsigned long)'
sqserver.cpp:(.text+0x290): undefined reference to `seal::EncryptionParameters::compute_parms_id()'
sqserver.cpp:(.text+0x4f6): undefined reference to `seal::SEALContext::SEALContext(seal::EncryptionParameters, bool, seal::sec_level_type, seal::MemoryPoolHandle)'
sqserver.cpp:(.text+0x636): undefined reference to `seal::Evaluator::Evaluator(seal::SEALContext const&)'
CMakeFiles/secure-query.dir/src/sqserver.cpp.o: In function `SQServer::createSealContextFromParameters(seal::EncryptionParameters)':
sqserver.cpp:(.text+0xe6a): undefined reference to `seal::SEALContext::SEALContext(seal::EncryptionParameters, bool, seal::sec_level_type, seal::MemoryPoolHandle)'
sqserver.cpp:(.text+0xf96): undefined reference to `seal::Evaluator::Evaluator(seal::SEALContext const&)'
CMakeFiles/secure-query.dir/src/sqserver.cpp.o: In function `SQServer::createPlain1CT()':
sqserver.cpp:(.text+0x1383): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x139b): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x13fb): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x1402): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x1445): undefined reference to `seal::parms_id_zero'
CMakeFiles/secure-query.dir/src/sqserver.cpp.o:sqserver.cpp:(.text+0x144c): more undefined references to `seal::parms_id_zero' follow
CMakeFiles/secure-query.dir/src/sqserver.cpp.o: In function `SQServer::createPlain1CT()':
sqserver.cpp:(.text+0x166c): undefined reference to `seal::Encryptor::encrypt_internal(seal::Plaintext const&, bool, bool, seal::Ciphertext&, seal::MemoryPoolHandle) const'
CMakeFiles/secure-query.dir/src/sqserver.cpp.o: In function `SQServer::generateComparisonMaskUsingFLT(seal::Ciphertext const&, seal::Ciphertext const&, seal::RelinKeys)':
sqserver.cpp:(.text+0x1a8e): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x1a9e): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x1b16): undefined reference to `seal::Ciphertext::operator=(seal::Ciphertext const&)'
sqserver.cpp:(.text+0x1b24): undefined reference to `seal::Evaluator::sub_inplace(seal::Ciphertext&, seal::Ciphertext const&) const'
sqserver.cpp:(.text+0x1b6a): undefined reference to `seal::Evaluator::exponentiate_inplace(seal::Ciphertext&, unsigned long, seal::RelinKeys const&, seal::MemoryPoolHandle) const'
sqserver.cpp:(.text+0x1ba3): undefined reference to `seal::Evaluator::negate_inplace(seal::Ciphertext&) const'
sqserver.cpp:(.text+0x1bb9): undefined reference to `seal::Evaluator::add_inplace(seal::Ciphertext&, seal::Ciphertext const&) const'
sqserver.cpp:(.text+0x1cda): undefined reference to `seal::Evaluator::sub_inplace(seal::Ciphertext&, seal::Ciphertext const&) const'
sqserver.cpp:(.text+0x1ce5): undefined reference to `seal::Evaluator::negate_inplace(seal::Ciphertext&) const'
CMakeFiles/secure-query.dir/src/sqserver.cpp.o: In function `SQServer::SQServer()':
sqserver.cpp:(.text+0x1d82): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x1d90): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x1e88): undefined reference to `seal::Modulus::set_value(unsigned long)'
sqserver.cpp:(.text+0x1e92): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x1e9f): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x1eb4): undefined reference to `seal::EncryptionParameters::compute_parms_id()'
sqserver.cpp:(.text+0x1f1e): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x1f28): undefined reference to `seal::parms_id_zero'
CMakeFiles/secure-query.dir/src/sqserver.cpp.o: In function `SQServer::queryDatabaseForMatchingEntry(std::vector<seal::Ciphertext, std::allocator<seal::Ciphertext> >, seal::RelinKeys)':
sqserver.cpp:(.text+0x2173): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x2183): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x229b): undefined reference to `seal::Encryptor::encrypt_zero_internal(std::array<unsigned long, 4ul>, bool, bool, seal::Ciphertext&, seal::MemoryPoolHandle) const'
CMakeFiles/secure-query.dir/src/sqserver.cpp.o: In function `SQServer::queryDatabaseForMatchingEntry(std::vector<seal::Ciphertext, std::allocator<seal::Ciphertext> >, seal::RelinKeys) [clone ._omp_fn.0]':
sqserver.cpp:(.text+0x275c): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x2766): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x28e4): undefined reference to `seal::Encryptor::encrypt_zero_internal(std::array<unsigned long, 4ul>, bool, bool, seal::Ciphertext&, seal::MemoryPoolHandle) const'
sqserver.cpp:(.text+0x29a1): undefined reference to `seal::Evaluator::add_inplace(seal::Ciphertext&, seal::Ciphertext const&) const'
sqserver.cpp:(.text+0x30ce): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x30eb): undefined reference to `seal::parms_id_zero'
sqserver.cpp:(.text+0x32f1): undefined reference to `seal::Evaluator::multiply_many(std::vector<seal::Ciphertext, std::allocator<seal::Ciphertext> > const&, seal::RelinKeys const&, seal::Ciphertext&, seal::MemoryPoolHandle) const'
sqserver.cpp:(.text+0x3356): undefined reference to `seal::Evaluator::add_inplace(seal::Ciphertext&, seal::Ciphertext const&) const'
CMakeFiles/secure-query.dir/src/sqserver.cpp.o: In function `std::vector<seal::Ciphertext, std::allocator<seal::Ciphertext> >::operator=(std::vector<seal::Ciphertext, std::allocator<seal::Ciphertext> > const&)':
sqserver.cpp:(.text._ZNSt6vectorIN4seal10CiphertextESaIS1_EEaSERKS3_[_ZNSt6vectorIN4seal10CiphertextESaIS1_EEaSERKS3_]+0xab): undefined reference to `seal::Ciphertext::operator=(seal::Ciphertext const&)'
sqserver.cpp:(.text._ZNSt6vectorIN4seal10CiphertextESaIS1_EEaSERKS3_[_ZNSt6vectorIN4seal10CiphertextESaIS1_EEaSERKS3_]+0x39d): undefined reference to `seal::Ciphertext::operator=(seal::Ciphertext const&)'
CMakeFiles/secure-query.dir/src/sqserver.cpp.o: In function `std::vector<EncryptedDatabaseEntry, std::allocator<EncryptedDatabaseEntry> >::operator=(std::vector<EncryptedDatabaseEntry, std::allocator<EncryptedDatabaseEntry> > const&)':
sqserver.cpp:(.text._ZNSt6vectorI22EncryptedDatabaseEntrySaIS0_EEaSERKS2_[_ZNSt6vectorI22EncryptedDatabaseEntrySaIS0_EEaSERKS2_]+0xbc): undefined reference to `seal::Ciphertext::operator=(seal::Ciphertext const&)'
sqserver.cpp:(.text._ZNSt6vectorI22EncryptedDatabaseEntrySaIS0_EEaSERKS2_[_ZNSt6vectorI22EncryptedDatabaseEntrySaIS0_EEaSERKS2_]+0x6f3): undefined reference to `seal::Ciphertext::operator=(seal::Ciphertext const&)'
/home/tgonzale/hexl-fpga-integration/public-he-toolkit/he-samples/build/ext_seal/lib/libseal.so: undefined reference to `intel::hexl::EltwiseMultMod(unsigned long*, unsigned long const*, unsigned long const*, unsigned long, unsigned long, unsigned long)'
/home/tgonzale/hexl-fpga-integration/public-he-toolkit/he-samples/build/ext_seal/lib/libseal.so: undefined reference to `intel::hexl::EltwiseReduceMod(unsigned long*, unsigned long const*, unsigned long, unsigned long, unsigned long, unsigned long)'
/home/tgonzale/hexl-fpga-integration/public-he-toolkit/he-samples/build/ext_seal/lib/libseal.so: undefined reference to `intel::hexl::NTT::ComputeInverse(unsigned long*, unsigned long const*, unsigned long, unsigned long)'
/home/tgonzale/hexl-fpga-integration/public-he-toolkit/he-samples/build/ext_seal/lib/libseal.so: undefined reference to `intel::hexl::EltwiseAddMod(unsigned long*, unsigned long const*, unsigned long const*, unsigned long, unsigned long)'
/home/tgonzale/hexl-fpga-integration/public-he-toolkit/he-samples/build/ext_seal/lib/libseal.so: undefined reference to `intel::hexl::EltwiseSubMod(unsigned long*, unsigned long const*, unsigned long const*, unsigned long, unsigned long)'
/home/tgonzale/hexl-fpga-integration/public-he-toolkit/he-samples/build/ext_seal/lib/libseal.so: undefined reference to `intel::hexl::NTT::ComputeForward(unsigned long*, unsigned long const*, unsigned long, unsigned long)'
/home/tgonzale/hexl-fpga-integration/public-he-toolkit/he-samples/build/ext_seal/lib/libseal.so: undefined reference to `intel::hexl::EltwiseFMAMod(unsigned long*, unsigned long const*, unsigned long, unsigned long const*, unsigned long, unsigned long, unsigned long)'
/home/tgonzale/hexl-fpga-integration/public-he-toolkit/he-samples/build/ext_seal/lib/libseal.so: undefined reference to `intel::hexl::EltwiseAddMod(unsigned long*, unsigned long const*, unsigned long, unsigned long, unsigned long)'
/home/tgonzale/hexl-fpga-integration/public-he-toolkit/he-samples/build/ext_seal/lib/libseal.so: undefined reference to `intel::hexl::EltwiseSubMod(unsigned long*, unsigned long const*, unsigned long, unsigned long, unsigned long)'
/home/tgonzale/hexl-fpga-integration/public-he-toolkit/he-samples/build/ext_seal/lib/libseal.so: undefined reference to `intel::hexl::NTT::NTT(unsigned long, unsigned long, unsigned long, std::shared_ptr<intel::hexl::AllocatorBase>)'
collect2: error: ld returned 1 exit status
gmake[2]: *** [examples/secure-query/secure-query] Error 1
gmake[1]: *** [examples/secure-query/CMakeFiles/secure-query.dir/all] Error 2
gmake[1]: *** Waiting for unfinished jobs....
[ 74%] Linking CXX shared library liblrhe_kernel.so
[ 76%] Linking CXX shared library libseal_kernel_executor.so
[ 76%] Built target lrhe_kernel
[ 76%] Built target seal_kernel_executor
gmake: *** [all] Error 2

tried to build the docker file getting this error

Wrongly opened under HEXL project
original issue: intel/hexl#112, body copied here below.
@martystack

mac osx 12.1
docker version 4.6.1
hexl version v1.2.4

7 393.9 [ 86%] Linking CXX executable ../bin/benchmark/poly-benchmark-16k
#7 394.7 [ 86%] Built target compare-bfvrns-vs-bfvrnsB
#7 394.8 [ 86%] Built target poly-benchmark-16k
#7 395.1 [ 87%] Linking CXX executable ../../bin/examples/pke/depth-bfvrns
#7 395.3 [ 87%] Built target depth-bfvrns
#7 395.6 [ 87%] Linking CXX executable ../bin/benchmark/poly-benchmark-4k
#7 395.8 [ 87%] Linking CXX executable ../../bin/examples/pke/evalatindex
#7 395.8 [ 88%] Linking CXX executable ../../bin/examples/pke/depth-bfvrns-b
#7 396.0 [ 88%] Built target poly-benchmark-4k
#7 396.3 [ 88%] Built target depth-bfvrns-b
#7 396.5 [ 88%] Built target evalatindex
#7 396.7 [ 88%] Linking CXX executable ../../bin/examples/pke/depth-bgvrns
#7 397.3 [ 88%] Built target depth-bgvrns
#7 399.4 [ 88%] Linking CXX executable ../bin/benchmark/lib-benchmark
#7 399.9 [ 88%] Built target lib-benchmark
#7 401.7 [ 89%] Linking CXX executable ../../bin/examples/pke/threshold-fhe
#7 402.2 [ 89%] Built target threshold-fhe
#7 402.7 [ 90%] Linking CXX executable ../bin/benchmark/VectorMath
#7 403.1 [ 90%] Built target VectorMath
#7 407.7 [ 91%] Linking CXX executable ../bin/benchmark/lib-hexl-benchmark
#7 408.2 [ 91%] Built target lib-hexl-benchmark
#7 443.1 [ 92%] Linking CXX executable ../bin/benchmark/serialize-ckks
#7 443.4 [ 92%] Built target serialize-ckks
#7 444.7 make[1]: *** [CMakeFiles/Makefile2:1406: src/pke/CMakeFiles/pke_tests.dir/all] Error 2
#7 445.3 [ 93%] Linking CXX executable ../../bin/examples/pke/simple-integers-serial-bgvrns
#7 445.5 [ 93%] Built target simple-integers-serial-bgvrns
#7 451.7 [ 93%] Linking CXX executable ../../bin/examples/pke/simple-integers-serial
#7 451.9 [ 93%] Built target simple-integers-serial
#7 451.9 make: *** [Makefile:149: all] Error 2
executor failed running [/bin/sh -c tar -zxvf libs.tar.gz && cd /libs/hexl && cmake -S . -B build && cmake --build build -j && cmake --install build && cd /libs/GSL && cmake -S . -B build -DGSL_TEST=OFF && cmake --build build -j && cmake --install build && cd /libs/zlib && cmake -S . -B build && cmake --build build -j && cmake --install build && cd /libs/zstd/build/cmake && cmake -S . -B build -DZSTD_BUILD_PROGRAMS=OFF -DZSTD_BUILD_SHARED=OFF -DZSTD_BUILD_STATIC=ON -DZSTD_BUILD_TESTS=OFF -DZSTD_MULTITHREAD_SUPPORT=OFF && cmake --build build -j && cmake --install build && cd /libs/SEAL && cmake -S . -B build -DSEAL_BUILD_DEPS=OFF -DSEAL_USE_INTEL_HEXL=ON -DHEXL_DIR=/usr/local/lib/cmake/hexl-1.2.3/ && cmake --build build -j && cmake --install build && cd /libs/palisade-release && cmake -S . -B build -DWITH_INTEL_HEXL=ON -DINTEL_HEXL_PREBUILT=ON -DINTEL_HEXL_HINT_DIR=/usr/local/lib/cmake/hexl-1.2.3/ && cmake --build build -j && cmake --install build && cd /libs/HElib && cmake -S . -B build -DUSE_INTEL_HEXL=ON -DHEXL_DIR=/usr/local/lib/cmake/hexl-1.2.3/ && cmake --build build -j && cmake --install build]: exit code: 2

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.