为arm cortex-m4交叉编译libwebsockets时出现cmake错误

时间:2016-07-20 02:38:41

标签: c linux cmake openssl arm

让我先说一下这个问题:我今天花了好几个小时研究这个问题,在stackoverflow上有很多点击。我觉得我很亲近,但总有一些东西在路上。我不会问我是不是觉得我已经厌倦了谷歌提供的东西了。我非常了解我的目标,并成功地交叉编译了许多开源软件包,但是,鉴于libwebsockets使用的是我不熟悉的cmake,错误对我来说非常陌生;我想我可以通过cmake文档,但我怀疑我会在我的时间范围内找到答案。

我正在尝试为ARM-Cortex-M4平台交叉编译libwebsockets。我按照libwebsockets文档中的说明操作: 1)在libwebsockets源目录上创建一个“build”目录。 2)在构建目录中,调用cmake:

cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross.cmake

3)我使用他们的ARM模板创建了cross.cmake

#
# CMake Toolchain file for crosscompiling on ARM.
#
# This can be used when running cmake in the following way:
#  cd build/
#  cmake .. -DCMAKE_TOOLCHAIN_FILE=../cross-arm-linux-gnueabihf.cmake
#


# Name of C compiler.
SET(CMAKE_C_COMPILER "arm-uclinuxeabi-gcc")
SET(CMAKE_CXX_COMPILER "arm-uclinuxeabi-g++")


# this one is important
SET(CMAKE_SYSTEM_NAME Linux)
#this one not so much
SET(CMAKE_SYSTEM_VERSION 1)
SET(BUILD_SHARED_LIBS OFF)

# where is the target environment 
SET(CMAKE_FIND_ROOT_PATH  ../../../../A2F ../../../../tools ../../../xv-nic)
SET(ZLIB_INCLUDE_DIR "../lzo-2.09/")
SET(ZLIB_LIBRARY "../../lib/libz.a")
SET(OPENSSL_ROOT_DIR "../../ssl")
SET(OPENSSL_LIBRARIES "../../ssl/usr/local/ssl/lib/")
SET(OPENSSL_INCLUDE_DIR "../../ssl/usr/local/ssl/include/openssl/")

# search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

4)此投诉失败

Compiling with SSL support
CMake Error at /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the
  system variable OPENSSL_ROOT_DIR (missing: **OPENSSL_LIBRARIES**)
Call Stack (most recent call first):
  /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-3.5/Modules/FindOpenSSL.cmake:370 (find_package_handle_standard_args)
  CMakeLists.txt:816 (find_package)

现在,令我感到好奇/令人沮丧的是,我已经安装了openssl我声称的地方;此外,如果我删除

SET(ZLIB_INCLUDE_DIR "../lzo-2.09/")

,我收到类似图书馆投诉的投诉。此外,cmake似乎找到了以类似方式存在的zlib。我已经使用这个ssl设置编译了其他几个应用程序而没有遇到麻烦,尽管我对cmake一般都不熟悉。

我试图尽可能地冗长而不用太长时间来阅读,所以如果我遗漏了一些东西,我会很乐意提供更多细节,如果有人为此而奋斗的话。提前致谢!

1 个答案:

答案 0 :(得分:1)

我有同样的问题。在我的 toolchain.cmake 文件中设置以下变量可以解决问题:

SET(ZLIB_INCLUDE_DIR ../../../build/buildroot-build/staging/usr/include)
SET(ZLIB_LIBRARY ../../../build/buildroot-build/target/usr/lib/libz.so)

SET(OPENSSL_ROOT_DIR ../../../build/buildroot-build/target/usr)
SET(OPENSSL_LIBRARIES ../../../build/buildroot-build/target/usr/lib)
SET(OPENSSL_INCLUDE_DIR ../../../build/buildroot-build/staging/usr/include/openssl)
SET(OPENSSL_CRYPTO_LIBRARY ../../../build/buildroot-build/target/usr/lib/libcrypto.so)
SET(OPENSSL_SSL_LIBRARY ../../../build/buildroot-build/target/usr/lib/libssl.so)
相关问题