CMake链接OpenSSL出现未定义符号错误,请求帮助
问题分析与解决
嘿,这个问题我之前也碰到过!你链接的libssl里根本没包含AES那些函数——这些加密算法其实在OpenSSL的libcrypto库里面呢。
OpenSSL其实拆成了两个核心库:
libssl:管的是SSL/TLS协议相关的活儿,比如握手、证书验证这类网络安全功能libcrypto:才是提供底层加密算法实现的地方,像你用到的AES加解密、密钥设置这些接口全在这儿
你的CMake代码里只链接了${OPENSSL_SSL_LIBRARY},漏掉了承载AES函数的libcrypto,难怪链接器会报符号找不到的错误。
修正后的CMakeLists.txt
把链接部分改成同时包含两个库就行:
find_package(OpenSSL REQUIRED) add_executable( aes_test src/aes_test.cpp ) MESSAGE(${OPENSSL_FOUND}) MESSAGE(${OPENSSL_SSL_LIBRARY}) MESSAGE(${OPENSSL_CRYPTO_LIBRARY}) # 可以加这句输出确认libcrypto的路径 target_link_libraries( aes_test ${OPENSSL_SSL_LIBRARY} ${OPENSSL_CRYPTO_LIBRARY} )
更规范的现代CMake写法(推荐)
如果你的CMake版本在3.10及以上,建议用OpenSSL提供的导入目标来写,这种方式更简洁,还能自动处理库的依赖关系,不容易出错:
find_package(OpenSSL REQUIRED) add_executable( aes_test src/aes_test.cpp ) target_link_libraries( aes_test PRIVATE OpenSSL::SSL OpenSSL::Crypto )
内容的提问来源于stack exchange,提问作者CoXier
相关产品推荐
相关产品推荐

