如何使用CMakeLists.txt链接预编译的.so文件

3

我正在尝试使用CMake与Android Studio编译C++代码,我有一个需要与目标链接的.so库。

我对CMake不太熟悉,以下是我的代码:

add_library(
    my_target
    SHARED
    ${SRCS}
)

find_library(
    SSL
    apex_fips_libs/libccmssl.so
)

target_link_libraries(
    my_target
    ${SSL}
)

文件夹结构:

-- Src
   -- some.cpp
   -- some2.cpp
   -- CMakeLists.txt
   -- apex_fips_libs
       --libccmssl.so

但是我遇到了以下错误:
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
  SSL

我明白SSL没有被设置,因为find_library找不到.so文件,但是为什么会这样呢?
我甚至尝试了使用绝对路径。有人能指导我正确的做法吗?
谢谢。

1
有什么不清楚的吗?显然你正在使用 SSL,但是你没有定义或赋值它。你指望它的值从哪里来?难道是凭空出现的吗? - Jesper Juhl
@JesperJuhl 感谢您的评论,我正在使用 -- find_library (<VAR> name1 [path1 path2 ...]),认为如果找到 .so 文件,则应该为我设置 SSL..我是否误解了这一点?https://cmake.org/cmake/help/v3.0/command/find_library.html - swati saoji
也许 find_library 没有找到它... - Jesper Juhl
是的,我理解那部分内容,我正在尝试弄清楚为什么它找不到.so文件。我编辑了问题以使其更具体。 - swati saoji
@drescherjm 不是在子文件夹中,我在我的问题中描述了目录的布局。 - swati saoji
1个回答

3

如果你确保已经构建了那个库,那么这可能是最简单的解决方案。

target_link_libraries(my_target ${CMAKE_SOURCE_DIR}/apex_fips_libs/libccmssl.so)

否则,您可能需要尝试更像这样的东西
find_library(SSL NAMES ccmssl PATHS ${CMAKE_SOURCE_DIR}/apex_fips_libs)
target_link_libraries(my_target ${SSL})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接