首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查兼容性

检查兼容性
EN

Stack Overflow用户
提问于 2019-09-20 17:49:01
回答 1查看 409关注 0票数 1

我有一个需要openssl的应用程序,它是使用cmake编译的。稳定的AIX 7.1 cmake版本是3.14.3

在cmake构建文件中,我进行了以下测试

代码语言:javascript
复制
include(CheckCSourceCompiles)
check_c_source_compiles(check_openssl.c HAS_NEW_ENOUGH_OPENSSL)

check_openssl.c

代码语言:javascript
复制
#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

至于我用来构建的命令

代码语言:javascript
复制
cmake -DJVM_ARCH_DATA_MODEL=64 -DUSE64bit=true -G "Unix Makefiles"
EN

回答 1

Stack Overflow用户

发布于 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所建议的那样。您还没有发布完整的代码示例,但我想您可以这样做:

代码语言:javascript
复制
# 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_INCLUDESCMAKE_REQUIRED_LIBRARIESdocumentation中列出的其他一些变量,才能正确运行check_c_*命令。您可以检查CMakeError.log文件,以了解在兼容性检查过程中可能发生的错误。

此外,结果变量HAS_NEW_ENOUGH_OPENSSL将被缓存,并且不会在源文件更改时更改,因此您可能希望在使用完它之后对其执行unset操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58025928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档