1

我想使用 emscripten 编译 SealPIR 库以生成 wasm 文件。使用此命令时: emcmake cmake .

我收到此错误:

CMake Error at CMakeLists.txt:19 (find_package):
  By not providing "FindSEAL.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "SEAL", but
  CMake did not find one.

  Could not find a package configuration file provided by "SEAL" (requested
  version 3.2.0) with any of the following names:

    SEALConfig.cmake
    seal-config.cmake

  Add the installation prefix of "SEAL" to CMAKE_PREFIX_PATH or set
  "SEAL_DIR" to a directory containing one of the above files.  If "SEAL"
  provides a separate development package or SDK, be sure it has been
  installed.


-- Configuring incomplete, errors occurred!
See also "/home/Zied/webassembly/SealPIR/CMakeFiles/CMakeOutput.log".
emcmake: error: 'cmake . -DCMAKE_TOOLCHAIN_FILE=/home/Zied/webassembly/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake -DCMAKE_CROSSCOMPILING_EMULATOR="/home/Zied/webassembly/emsdk/node/14.15.5_64bit/bin/node"' failed (1)  

SEAL 已正确安装。当我在没有 emcmake 的情况下运行相同的命令时,它工作得很好。这是我的 CMakeList

cmake_minimum_required(VERSION 3.10)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

project(SealPIR VERSION 2.1 LANGUAGES CXX)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)

add_executable(main 
    main.cpp
)

add_library(sealpir STATIC
  pir.cpp
  pir_client.cpp
  pir_server.cpp
)

find_package(SEAL 3.2.0 EXACT REQUIRED)

target_link_libraries(main sealpir SEAL::seal)
4

1 回答 1

1

当使用工具链文件进行交叉编译时,CMake 默认禁用系统库。它不会搜索任何目录以避免找到与目标系统不兼容的文件。

你认为你没有使用工具链文件吗?再想想!emcmake对你隐瞒。仔细查看错误输出。

在这里,您编译了 SEAL 库,但您将其安装在默认路径中,即/usr/local.

我们可以告诉 CMake 在那里显式搜索,但我不推荐,但如果它有效,您可以尝试:

emcmake cmake . -CMAKE_PREFIX_PATH=/usr/local

正确的解决方案是创建一个包含所有 emscripten 库的目录:

# In the SEAL build directory
emcmake cmake .. -DCMAKE_INSTALL_PREFIX=/home/anblic/webassembly/install

然后在该目录中安装库后,您可以将前缀路径设置在与安装路径相同的目录中:

# Assuming you're in a build/ subdirectory
emcmake cmake .. -DCMAKE_PREFIX_PATH=/home/anblic/webassembly/install
于 2021-06-16T16:06:32.700 回答