Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cmake:导入预构建库时缺少并且没有已知的规则_Cmake - Fatal编程技术网

cmake:导入预构建库时缺少并且没有已知的规则

cmake:导入预构建库时缺少并且没有已知的规则,cmake,Cmake,我想使用以下CmakeLists.txt代码段导入预构建库: add_library(openssl-crypto SHARED IMPORTED ) set_target_properties(openssl-crypto PROPERTIES IMPORTED_LOCATION ${external_DIR}/li

我想使用以下CmakeLists.txt代码段导入预构建库:

add_library(openssl-crypto
            SHARED
            IMPORTED )
set_target_properties(openssl-crypto
                      PROPERTIES
                      IMPORTED_LOCATION
                      ${external_DIR}/libs/${ANDROID_ABI}/libcrypto.so )
include_directories(${external_DIR}/include/openssl)
我将此链接链接到我的库,如下所示:

目标链接库(aes加密openssl加密)

尝试生成时返回此错误:

'/libs/arm64-v8a/libcrypto.so', needed by ...,  missing and no known rule to make it

我发现
set\u target\u properties
函数不喜欢相对路径


导入目标的磁盘上主文件的完整路径


为了解决这个问题,我使用了库的完整路径

例如:

set_target_properties ( curl-lib 
                        PROPERTIES IMPORTED_LOCATION 
                        libs/${ANDROID_ABI}/libcurl.a )

. . . becomes . . . 

set_target_properties ( curl-lib 
                        PROPERTIES IMPORTED_LOCATION 
                        ${PROJECT_SOURCE_DIR}/src/main/cpp/libs/${ANDROID_ABI}/libcurl.a )


您可以使用属性为
TARGET
set\u property
函数,而不是
set\u TARGET\u properties
,然后您可以使用宏
${PROJECT\u SOURCE\u DIR}
相对地设置路径

# import shared library libmylib.so    
add_library( my-imported-lib 
             SHARED 
             IMPORTED) 

# set the path to appropriate so files with appropriate architectures
set_property(TARGET 
             my-imported-lib 
             PROPERTY IMPORTED_LOCATION ${PROJECT_SOURCE_DIR}/<path_to_libs_directory>/${ANDROID_ABI}/libmy-imported-lib.so) 

...

# link imported library to your developed library
target_link_libraries( my-developed-lib 
                       my-imported-lib ) 
#导入共享库libmylib.so
添加库(我的导入库)
共享
进口的)
#将路径设置为具有适当体系结构的适当so文件
设置_属性(目标
我的导入库
属性导入(导入的位置${PROJECT\u SOURCE\u DIR}/${ANDROID\u ABI}/libmy IMPORTED lib.so)
...
#将导入的库链接到开发的库
目标链接库(我开发的库
我的导入库)

也许您可以使用宏
${PROJECT\u SOURCE\u DIR}
,同时使用
set\u target\u properties设置lib path
,但我没有这样检查。

可能文件的日期时间错误。 设置
${external_DIR}/libs/${ANDROID_ABI}/libcrypto的当前日期时间。因此

touch ${external_DIR}/libs/${ANDROID_ABI}/libcrypto.so

如果使用:
添加依赖项(aes crypto openssl crypto)
有帮助吗?那么如何构建openssl加密呢?
添加依赖项
不起作用。我使用
add_库(openssl crypto SHARED IMPORTED)
构建openssl加密库问题似乎是变量“external_DIR”为空。谢谢。external_DIR是空的,实际上,当我将external_DIR更改为绝对路径时,我没有看到相同的错误。但现在我在构建另一个预构建库时遇到了一个新错误,即“添加符号时出错:文件格式错误”,如
add_library(jni native helper SHARED IMPORTED)set_target_properties(jni native helper properties IMPORTED_LOCATION../../../src/main/cpp/external/libs/arm64-v8a/libnativehelper.so:)
,@用户7377570您应该为其创建一个新问题。我遇到了与您相同的问题。使用
${PROJECT\u SOURCE\u DIR}
将库路径设置为
set\u target\u属性
对我有效。这个答案应该被接受