Kag*_*sen 2 openssl cmake static-linking
我需要为 MIPS 设备制作一个交叉编译的 OpenSSL。我试过按照文档进行操作。设置OPENSSL_USE_STATIC_LIBS为 true 并设置target_link_libraries为您需要的库文件。
CMakeLists.txt:
compileAsC99()
if(NOT ${use_http})
message(FATAL_ERROR "program being generated without HTTP support")
endif()
set(program_c_files
...
)
set(program_h_files
...
)
include_directories(...)
add_executable(program ${program_c_files} ${program_h_files})
set(OPENSSL_USE_STATIC_LIBS TRUE)
#target_link_libraries(program OpenSSL::Crypto)
target_link_libraries(program /home/program/mips/lib/libssl.so.1.1)
target_link_libraries(program /home/program/mips/lib/libcrypto.so.1.1)
Run Code Online (Sandbox Code Playgroud)
它编译得很好,没有警告,但检查生成的二进制文件告诉我它仍然是共享库。
readelf -d 程序:
Dynamic section at offset 0x1bc contains 35 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libssl.so.1.1]
0x00000001 (NEEDED) Shared library: [libcrypto.so.1.1]
0x0000000f (RPATH) Library rpath: [/home/program/mips/lib]
Run Code Online (Sandbox Code Playgroud)
我不明白我做错了什么。
编辑:已经看过在 CMake 中静态链接 OpenSSL 加密库,但它没有告诉我任何新的东西。
编辑 2:根据回复更新 CMakeLists.txt 文件:CMakeLists.txt:
compileAsC99()
if(NOT ${use_http})
message(FATAL_ERROR "program being generated without HTTP support")
endif()
set(program_c_files
...
)
set(program_h_files
...
)
include_directories(...)
add_executable(program ${program_c_files} ${program_h_files})
find_package(OpenSSL REQUIRED)
if(OPENSSL_FOUND)
set(OPENSSL_USE_STATIC_LIBS TRUE)
message("OPENSSL FOUND!")
endif()
target_link_libraries(program OpenSSL::Crypto)
Run Code Online (Sandbox Code Playgroud)
输出:
-- IoT Client SDK Version = 1.2.11
-- Provisioning client OFF
-- target architecture: GENERIC
-- Cross compiling not using pkg-config
-- Found CURL: /home/program/mips/lib/libcurl.a (found version "7.63.0")
-- Found CURL: /home/program/mips/lib/libcurl.a
-- target architecture: GENERIC
-- target architecture: GENERIC
-- target architecture: GENERIC
-- target architecture: GENERIC
-- iothub architecture: GENERIC
OPENSSL FOUND!
-- Configuring done
-- Generating done
Run Code Online (Sandbox Code Playgroud)
编辑繁荣:如果你,未来的人,遇到了undefined reference to dlopen,我将以下内容添加到我的CMakeLists.txt文件中
target_link_libraries(program ${CMAKE_DL_LIBS})
Run Code Online (Sandbox Code Playgroud)
设置为 TRUE,变量OPENSSL_USE_STATIC_LIBS强制find_package(OpenSSL)搜索静态库。所以这个变量只适用于那个调用,如果你使用它的结果:
set(OPENSSL_USE_STATIC_LIBS TRUE)
find_package(OpenSSL REQUIRED)
target_link_libraries(program OpenSSL::Crypto)
Run Code Online (Sandbox Code Playgroud)
如果你已经在cmake没有设置的情况下执行过OPENSSL_USE_STATIC_LIBS,那么你需要CMakeCache.txt在新的尝试之前删除 CMake 缓存(在 build 目录下)。否则,将使用已经找到(共享!)的库,并且不会执行重新搜索。
| 归档时间: |
|
| 查看次数: |
4089 次 |
| 最近记录: |