交叉编译 libwebsockets 时字段‘ctx’有不完整的类型错误

field ‘ctx’ has incomplete type error when cross compiling libwebsockets

我正在尝试为 arm 交叉编译 libwebsockets。我将 OpenSSL 和 Zlib 路径放在 CMakefiles.txt 中。 但是在命令“make”之后,它会出错。

OpenSSL 和 Zlib 路径设置 CMakefiles.txt

SET(ZLIB_INCLUDE_DIR /home/jacob/Workspace/lib/zlib/include)
SET(ZLIB_LIBRARY /home/jacob/Workspace/lib/zlib/lib/libz.so)

set(OPENSSL_ROOT_DIR /home/jacob/Workspace/lib/openssl/)
set(OPENSSL_CRYPTO_LIBRARY /home/jacob/Workspace/lib/openssl/lib/libcrypto.so)
set(OPENSSL_INCLUDE_DIR /home/jacob/Workspace/lib/openssl/include/)
set(OPENSSL_LIBRARIES /home/jacob/Workspace/lib/openssl/lib/)
set(OPENSSL_SSL_LIBRARY /home/jacob/Workspace/lib/openssl/lib/libssl.so)

输入“make”命令时的错误

jacob@ubuntu:~/Workspace/Github/libwebsockets/build$ make
Scanning dependencies of target GENHDR
[  1%] Creating build include dir
[  1%] Built target GENHDR
Scanning dependencies of target websockets
[  2%] Building C object lib/CMakeFiles/websockets.dir/plat/unix/unix-caps.c.o
In file included from /home/jacob/Workspace/Github/libwebsockets/include/libwebsockets.h:632,
                 from /home/jacob/Workspace/Github/libwebsockets/lib/core/./private-lib-core.h:140,
                 from /home/jacob/Workspace/Github/libwebsockets/lib/plat/unix/unix-caps.c:28:
/home/jacob/Workspace/Github/libwebsockets/include/libwebsockets/lws-genhash.h:85:18: error: field ‘ctx’ has incomplete type
   85 |         HMAC_CTX ctx;
      |                  ^~~
lib/CMakeFiles/websockets.dir/build.make:62: recipe for target 'lib/CMakeFiles/websockets.dir/plat/unix/unix-caps.c.o' failed
make[2]: *** [lib/CMakeFiles/websockets.dir/plat/unix/unix-caps.c.o] Error 1
CMakeFiles/Makefile2:1068: recipe for target 'lib/CMakeFiles/websockets.dir/all' failed
make[1]: *** [lib/CMakeFiles/websockets.dir/all] Error 2
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2

我自己解决了这个问题。我添加了工具链的cmake选项,我交叉编译的openssl等等。

cmake 命令

cmake -DLWS_WITHOUT_EXTENSIONS=ON -DLWS_WITHOUT_TESTAPPS=ON -DLWS_WITHOUT_TEST_CLIENT=ON \
-DLWS_WITHOUT_TEST_ECHO=ON -DLWS_WITHOUT_TEST_FRAGGLE=ON -DLWS_WITHOUT_TEST_PING=ON \
-DLWS_WITHOUT_TEST_SERVER=ON -DLWS_WITHOUT_TEST_SERVER_EXTPOLL=ON -DLWS_WITH_NO_LOGS=ON \
-DLWS_WITH_RANGES=OFF -DLWS_WITH_SHARED=OFF -DLWS_WITH_ZIP_FOPS=OFF -DLWS_WITH_ZLIB=OFF \
-DLWS_STATIC_PIC=ON -DLWS_WITH_SSL=ON \
-DLWS_OPENSSL_LIBRARIES="/home/jacob/Workspace/lib/openssl/lib/libssl.a;/home/jacob/Workspace/lib/openssl/lib/libcrypto.a" \
-DLWS_OPENSSL_INCLUDE_DIRS="/home/jacob/Workspace/lib/openssl/include" \
-DCMAKE_TOOLCHAIN_FILE="/home/jacob/Workspace/Github/libwebsockets/cross-compile-arm.cmake" ..

交叉编译-arm.cmake

set(CROSS_PATH /your-toolchain-path/bin)
set(CMAKE_SYSTEM_NAME Ubuntu)
set(BUILD_SHARED_LIBS OFF)
set(CMAKE_C_COMPILER "${CROSS_PATH}/arm-linux-gnueabihf-gcc")
set(CMAKE_CXX_COMPILER "${CROSS_PATH}/arm-linux-gnueabihf-g++")
set(CMAKE_C_FLAGS "-Wno-error")
set(CMAKE_FIND_ROOT_PATH "${CROSS_PATH}")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)