CMake 中的 LibSodium 依赖项无法在 Docker 容器中解析
LibSodium dependency in CMake doesn't resolve in Docker container
我正在尝试使用 Docker 和 CMake 构建我的 C 项目。使用 cmake . && cmake --build .
的 CMake 在我的系统 (MacOS) 上运行良好,使用以下 CMakeLists.txt:
cmake_minimum_required (VERSION 3.0)
project (PROJECTNAME)
# Include libsodium
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules")
find_package(sodium REQUIRED)
include_directories(include)
file(GLOB SOURCES "src/*.c")
set(LIBRARY_OUTPUT_PATH "build")
add_library(project STATIC ${SOURCES})
target_link_libraries(project sodium)
find_package(sodium REQUIRED)
所需的 Findsodium.cmake 是 the libsodium GitHub 上文件的直接副本。
现在我正在尝试使用 docker build
和以下 Docker 文件构建它(我知道它安装的一些包是多余的):
FROM ubuntu:16.04
COPY . /project
RUN apt-get update && apt-get -y install \
build-essential \
cmake \
libsodium18 \
curl
RUN cd project && cmake .
RUN cmake --build .
不幸的是,此操作失败并显示以下消息:
CMake Error at /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
Could NOT find sodium (missing: sodium_LIBRARY_RELEASE sodium_LIBRARY_DEBUG
sodium_INCLUDE_DIR)
Call Stack (most recent call first):
/usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
cmake/modules/Findsodium.cmake:226 (find_package_handle_standard_args)
CMakeLists.txt:8 (find_package)
当我 运行 一个普通的 docker 容器并手动执行这些步骤时,会抛出相同的错误。不知何故无法找到 libsodium,即使它已正确安装:
$ ldconfig -p | grep sodium
libsodium.so.18 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libsodium.so.18
有在 Ubuntu 上使用 Findsodium.cmake 或其他方面的经验的人可以提供一些见解吗?
编辑:根据LinPy的建议我添加了libsodium-dev
作为要安装的包,错误略有变化:
CMake Error at /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
Could NOT find sodium (missing: sodium_LIBRARY_RELEASE
sodium_LIBRARY_DEBUG) (found version "
#ifndef sodium_version_H
#define sodium_version_H
#include "export.h"
#define SODIUM_VERSION_STRING "1.0.8"
...
...
")
Call Stack (most recent call first):
/usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
cmake/modules/Findsodium.cmake:226 (find_package_handle_standard_args)
CMakeLists.txt:8 (find_package)
现在好像能找到一些东西,就是debug和release库找不到?
Docker文件现在看起来像这样:
FROM ubuntu:16.04
COPY . /project
RUN apt-get update && apt-get -y install \
build-essential \
cmake \
libsodium18 \ # also tried it without this line
libsodium-dev \
curl
RUN cd project && cmake .
RUN cmake --build .
编辑 2:添加 pkg-config
也修复了第二个错误。
将此添加到您的 dockerfile
:
RUN apt-get install -y libsodium-dev pkg-config
我正在尝试使用 Docker 和 CMake 构建我的 C 项目。使用 cmake . && cmake --build .
的 CMake 在我的系统 (MacOS) 上运行良好,使用以下 CMakeLists.txt:
cmake_minimum_required (VERSION 3.0)
project (PROJECTNAME)
# Include libsodium
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake/modules")
find_package(sodium REQUIRED)
include_directories(include)
file(GLOB SOURCES "src/*.c")
set(LIBRARY_OUTPUT_PATH "build")
add_library(project STATIC ${SOURCES})
target_link_libraries(project sodium)
find_package(sodium REQUIRED)
所需的 Findsodium.cmake 是 the libsodium GitHub 上文件的直接副本。
现在我正在尝试使用 docker build
和以下 Docker 文件构建它(我知道它安装的一些包是多余的):
FROM ubuntu:16.04
COPY . /project
RUN apt-get update && apt-get -y install \
build-essential \
cmake \
libsodium18 \
curl
RUN cd project && cmake .
RUN cmake --build .
不幸的是,此操作失败并显示以下消息:
CMake Error at /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
Could NOT find sodium (missing: sodium_LIBRARY_RELEASE sodium_LIBRARY_DEBUG
sodium_INCLUDE_DIR)
Call Stack (most recent call first):
/usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
cmake/modules/Findsodium.cmake:226 (find_package_handle_standard_args)
CMakeLists.txt:8 (find_package)
当我 运行 一个普通的 docker 容器并手动执行这些步骤时,会抛出相同的错误。不知何故无法找到 libsodium,即使它已正确安装:
$ ldconfig -p | grep sodium
libsodium.so.18 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libsodium.so.18
有在 Ubuntu 上使用 Findsodium.cmake 或其他方面的经验的人可以提供一些见解吗?
编辑:根据LinPy的建议我添加了libsodium-dev
作为要安装的包,错误略有变化:
CMake Error at /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
Could NOT find sodium (missing: sodium_LIBRARY_RELEASE
sodium_LIBRARY_DEBUG) (found version "
#ifndef sodium_version_H
#define sodium_version_H
#include "export.h"
#define SODIUM_VERSION_STRING "1.0.8"
...
...
")
Call Stack (most recent call first):
/usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
cmake/modules/Findsodium.cmake:226 (find_package_handle_standard_args)
CMakeLists.txt:8 (find_package)
现在好像能找到一些东西,就是debug和release库找不到?
Docker文件现在看起来像这样:
FROM ubuntu:16.04
COPY . /project
RUN apt-get update && apt-get -y install \
build-essential \
cmake \
libsodium18 \ # also tried it without this line
libsodium-dev \
curl
RUN cd project && cmake .
RUN cmake --build .
编辑 2:添加 pkg-config
也修复了第二个错误。
将此添加到您的 dockerfile
:
RUN apt-get install -y libsodium-dev pkg-config