如何在cmake中链接libdl库

我的应用程序依赖于OpenSSL。因此,我下载并构建了OpenSSL,并将我需要的静态库(libssl.alibcrypto.a)放置在我可以控制的已知目录中。在应用程序的cmake文件中,我使用find_library命令确定每个库的完整路径,将路径存储在list变量中,然后将该列表变量添加到target_link_libraries命令中。只要我的应用程序可以看到OpenSSL符号,就可以。

OpenSSL进一步依赖于“动态链接加载程序”库(也称为libdl)。我知道OpenSSL构建使用了-ldl编译器选项,因为我可以在构建输出中看到它。

在我的Linux开发机器上,libdl库似乎已安装。证据是:

  1. libdl.solibdl.so.2(到实际libdl-2-17.so库文件的符号链接)存在于似乎是此类事情的标准目录中:/usr/lib64
  2. 运行man dlclose时,将获得有关“动态链接加载程序”库的预期手册页。

但是,在构建应用程序时,出现如下链接错误。肯定找到libdl库。

/usr/bin/ld: ../install/lib/libcrypto.a(dso_dlfcn.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
/usr/lib64/libdl.so.2: error adding symbols: DSO missing from command line

问题1

cmake是否应该能够自行找到libdl.so

问题2

在应用程序的cmake文件中,我可以使用find_library命令来确定libdl库的完整路径,并将该路径添加到target_link_libraries命令中。注意,我不必给它一个路径提示。可以,但是感觉像是一种解决方法。

我是否有必要明确搜索libdl.so的完整路径?

问题3

cmake中是否有更合适的方法与“ libdl”之类的“标准”库链接?

cmake文件

以下是我的应用程序的cmake文件的相关摘要。

...

#------------------------------
# Search for openssl libraries.
set( OPENSSL_libraRIES )
find_library( temp libssl.a PATHS "${CMAKE_SOURCE_DIR}/3rd_party/" )
list( APPEND OPENSSL_libraRIES ${temp} )
unset( temp CACHE )

find_library( temp libcrypto.a PATHS "${CMAKE_SOURCE_DIR}/3rd_party/" )
list( APPEND OPENSSL_libraRIES ${temp} )
unset( temp CACHE )

#------------------------------
# Search for dl library.
# TODO:  Is this workaround really necessary?
find_library( DL_libraRY libdl.so  )

...

#------------------------------
# My application.
add_executable( myapp main.cxx )

set_target_properties( myapp PROPERTIES COMPILE_flaGS "-g" )

target_link_libraries( myapp
  ${OPENSSL_libraRIES}

  # TODO:  Is this workaround really necessary?
  ${DL_libraRY}
)

install( TARGETS myapp DESTINATION ${BIN_INSTALL_DIR} )

cmake版本

我正在使用cmake 2.8.12版本,但是特定版本可能并不重要。

zgkejizh 回答:如何在cmake中链接libdl库

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3148143.html

大家都在问