让我开头说明一下这个问题:今天我花了几个小时研究这个问题,在stackoverflow上有很多相关信息。我感觉离成功已经很接近了,但总有些问题无法解决。如果我没有尽可能利用谷歌的话,我也不会来问这个问题。我对我的目标非常了解,并且已经成功地交叉编译了许多开源软件包,但是由于libwebsockets使用了我不熟悉的cmake,所以这些错误对我来说相当陌生;我想我可以查阅一下cmake文档,但是我怀疑我不能在规定的时间内找到答案。
我正在尝试为ARM-Cortex-M4平台交叉编译libwebsockets。我遵循了libwebsockets文档的说明: 1)在libwebsockets源码目录上面创建一个“build”目录。 2)在build目录中调用cmake。
现在,令人好奇/沮丧的是,在我声称的位置我确实安装了openssl;此外,如果我删除...
我正在尝试为ARM-Cortex-M4平台交叉编译libwebsockets。我遵循了libwebsockets文档的说明: 1)在libwebsockets源码目录上面创建一个“build”目录。 2)在build目录中调用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不熟悉。
我尽量详细地描述,但又不至于让帖子过长难读。如果我有所遗漏,我很乐意提供更多细节,感谢您的帮助!
SET(OPENSSL_INCLUDE_DIR "../../ssl/usr/local/ssl/include/openssl/")
中删除尾随的openssl
。源文件将会#include <openssl/header.h>
,合并后的结果是头文件路径为.../ssl/usr/local/ssl/include/openssl/openssl/header.h
。您也可以尝试使用make V=1
或make VERBOSE=1
。它将提供比传统且几乎无用的 Cmake 输出更多的信息。 - jwwCFLAGS
和CXXFLAGS
中包含-mthumb -mcpu=cortex-m4
。如果有软浮点单元,可能还需要包含-mfloat-abi=softfp -mfpu=fpv4-sp-d16
,如果有硬浮点单元,则需要包含-mfloat-abi=hard -mfpu=fpv4-sp-d16
。另请参见cmake CFLAGS CXXFLAGS modification。 - jwwmessage()
函数输出变量来调试/usr/share/cmake-3.5/Modules/FindOpenSSL.cmake
。 - Velkan