Ubuntu下编译Android版OpenVPN3遇CMake生成失败及头文件缺失问题
Ubuntu下构建Android平台OpenVPN3的OpenSSL依赖问题解决
问题现象
在Ubuntu环境中构建Android平台的OpenVPN3时,出现两类关联问题:
- CMake生成阶段失败,提示无法找到
OpenSSL::SSL目标 - 强行执行
make命令后,出现openssl/opensslv.h头文件缺失的编译错误
错误信息
CMake生成错误
CMake Error at test/ovpncli/CMakeLists.txt:10 (add_library): Target "xkey" links to target "OpenSSL::SSL" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing? CMake Error at test/ovpncli/CMakeLists.txt:20 (add_executable): Target "ovpncli" links to target "OpenSSL::SSL" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing? CMake Error at test/ovpncli/CMakeLists.txt:20 (add_executable): Target "ovpncli" links to target "OpenSSL::SSL" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing?
Make执行错误
[ 20%] Building C object test/ovpncli/CMakeFiles/xkey.dir/__/__/openvpn/openssl/xkey/xkey_helper.c.o In file included from /home/e03014/e03014/openvpn3/openvpn/openssl/xkey/xkey_helper.c:15: /home/e03014/e03014/openvpn3/openvpn/openssl/xkey/xkey_common.h:24:10: fatal error: 'openssl/opensslv.h' file not found 24 | #include <openssl/opensslv.h> | ^~~~~~~~~~~~~~~~~~~~ 1 error generated. make[2]: *** [test/ovpncli/CMakeFiles/xkey.dir/build.make:76: test/ovpncli/CMakeFiles/xkey.dir/__/__/openvpn/openssl/xkey/xkey_helper.c.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:190: test/ovpncli/CMakeFiles/xkey.dir/all] Error 2 make: *** [Makefile:91: all] Error 2
使用的CMake命令
cmake -DOPENSSL_ROOT_DIR=../openssl -DOPENSSL_LIBRARY=../openssl/build/lib/libssl.so -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake -DANDROID_ABI=arm64-v8a -DANDROID_PLATFORM=android-21 -DBUILD_TESTING=OFF -DOPENSSL_CRYPTO_LIBRARY=../openssl/build/lib/libcrypto.so -DOPENSSL_INCLUDE_DIR=/home/userName/userName/openssl/build/include -DASIO_INCLUDE_DIR=/home/userName/userName/asio/asio/include -DLZ4_INCLUDE_DIR=/home/userName/userName/lz4/lib -DLZ4_LIBRARY=/home/userName/userName/lz4/lib/liblz4.so -DOPENVPN3_BUILD_OVPNCLI=OFF -Bbuild
解决步骤
确保OpenSSL为Android交叉编译版本
不能使用Ubuntu原生编译的OpenSSL库,必须用Android NDK交叉编译对应arm64-v8a架构的版本,确保库文件和头文件都是针对Android平台生成的。修正CMake路径参数
将OPENSSL_ROOT_DIR的相对路径替换为绝对路径,避免CMake解析路径时出错;同时验证OPENSSL_INCLUDE_DIR指向的目录下确实存在openssl/opensslv.h文件(路径应为${OPENSSL_INCLUDE_DIR}/openssl/opensslv.h)。让CMake正确识别OpenSSL导入目标
在CMake命令中添加-DCMAKE_FIND_ROOT_PATH=/home/userName/userName/openssl/build,指定交叉编译的根目录,帮助CMake找到正确的OpenSSL库;如果使用静态库,可添加-DOPENSSL_USE_STATIC_LIBS=ON参数。禁用测试目标编译
虽然设置了BUILD_TESTING=OFF,但错误仍来自test/ovpncli目录,可检查OpenVPN3的CMakeLists.txt是否正确处理该参数,或直接修改CMakeLists.txt禁用相关测试目标的编译。
内容的提问来源于stack exchange,提问作者Mayank Sharma
相关产品推荐
相关产品推荐

