交叉编译 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)
我正在尝试为 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)