我有一个需要openssl的应用程序,它是使用cmake编译的。稳定的AIX 7.1 cmake版本是3.14.3
在cmake构建文件中,我进行了以下测试
include(CheckCSourceCompiles)
check_c_source_compiles(check_openssl.c HAS_NEW_ENOUGH_OPENSSL)check_openssl.c
#include <stdio.h>
#include "/usr/local/include/openssl/ossl_type.h"
#include "/usr/local/include/openssl/evp.h"
int main(int argc, char **argv){
printf("out = %d", !EVP_aes_256_ctr);
return !EVP_aes_256_ctr;
}gcc编译没有任何问题,注释按预期打印出来。然而,当我用cmake测试它时,我得到了编译错误。
更新1:关注@squareskittle回答并将cmake升级到3.15.0 (从AIX中的源代码构建)后,我仍然一无所获。我得到的唯一错误消息是-- Performing Test HAS_NEW_ENOUGH_OPENSSL - Failed
至于我用来构建的命令
cmake -DJVM_ARCH_DATA_MODEL=64 -DUSE64bit=true -G "Unix Makefiles"发布于 2019-09-20 20:41:15
编辑:要正确使用check_c_source_compiles(),需要在CMake文件中插入实际的C代码。此外,由于代码中包含引号,因此必须使用反斜杠对引号进行转义(\")。请参见下面的示例。
如果可以编译源代码并将其链接到可执行文件,则应使用此check_c_source_compiles()命令检查是否为。如果可以,那么应该使用add_executable()或add_library()来实际编译它。编译后,您就可以运行它来打印注释消息。或者,如果你想在一次扫描中检查编译、链接和运行兼容性,你应该使用check_c_source_runs(),正如@Tsyvarev所建议的那样。您还没有发布完整的代码示例,但我想您可以这样做:
# Check for compile, link, run compatibility.
include(CheckCSourceRuns)
check_c_source_runs(
"
#include <stdio.h>
#include \"/usr/local/include/openssl/ossl_type.h\"
#include \"/usr/local/include/openssl/evp.h\"
int main(int argc, char **argv){
printf(\"out = %d\", !EVP_aes_256_ctr);
return !EVP_aes_256_ctr;
}
"
HAS_NEW_ENOUGH_OPENSSL
)
# Build if it is compatible.
if(HAS_NEW_ENOUGH_OPENSSL)
add_executable(MyOpenSslTest check_openssl.c)
endif()
...
unset(HAS_NEW_ENOUGH_OPENSSL CACHE)注意:这些命令依赖于其他变量来检索所有必要的编译/链接选项,以成功测试兼容性。您可能需要设置CMAKE_REQUIRED_INCLUDES、CMAKE_REQUIRED_LIBRARIES或documentation中列出的其他一些变量,才能正确运行check_c_*命令。您可以检查CMakeError.log文件,以了解在兼容性检查过程中可能发生的错误。
此外,结果变量HAS_NEW_ENOUGH_OPENSSL将被缓存,并且不会在源文件更改时更改,因此您可能希望在使用完它之后对其执行unset操作。
https://stackoverflow.com/questions/58025928
复制相似问题