簡體   English   中英

Qt Creator無法通過自定義cmake步驟找到庫

[英]Qt Creator cannot find library with custom cmake step

在Qt Creator(版本3.0.1,Qt版本5.2.1)中,我使用以下CMakeLists.txt文件進行了自定義cmake步驟(而不是qmake ):

cmake_minimum_required (VERSION 2.8)

add_executable (myapp source.cpp)

target_link_libraries(myapp dl)

在我的source.cpp文件中,我有以下代碼:

#include <dlfcn.h>

int main()
{
    dlopen("mylibrary.so", RTLD_NOW|RTLD_GLOBAL);
    return 0;
}

mylibrary.so位於/usr/lib

當我使用cmake並從命令行make編譯時,它會按預期進行編譯。 但是,如果嘗試在Qt Creator中進行構建,則會收到以下錯誤:

undefined reference to `dlopen'

這表明Qt Creator不知道在哪里找到libdl.so ,它位於/usr/lib/x86_64-linux-gnu

所以我的問題是:為什么從命令行運行cmakemake卻無法在Qt Creator中進行構建? 以及如何告訴Qt Creator在哪里搜索libdl.so

首先,您應該在Qt軟件中使用QLibrary來處理動態加載,查找等操作。 您還可以避免現在遇到的麻煩。

其次,您可以使用它,但是要承認,這有點麻煩:

target_link_libraries(myapp /usr/lib/x86_64-linux-gnu/libdl.so)

第三,更好的方法是為此使用一些查找模塊:

# - Find libdl
# Find the native LIBDL includes and library
#
# LIBDL_INCLUDE_DIR - where to find dlfcn.h, etc.
# LIBDL_LIBRARIES - List of libraries when using libdl.
# LIBDL_FOUND - True if libdl found.
IF (LIBDL_INCLUDE_DIR)
# Already in cache, be silent
SET(LIBDL_FIND_QUIETLY TRUE)
ENDIF (LIBDL_INCLUDE_DIR)
FIND_PATH(LIBDL_INCLUDE_DIR dlfcn.h)
SET(LIBDL_NAMES dl libdl ltdl libltdl)
FIND_LIBRARY(LIBDL_LIBRARY NAMES ${LIBDL_NAMES} )
# handle the QUIETLY and REQUIRED arguments and set LIBDL_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibDL DEFAULT_MSG LIBDL_LIBRARY LIBDL_INCLUDE_DIR)
IF(LIBDL_FOUND)
SET( LIBDL_LIBRARIES ${LIBDL_LIBRARY} )
ELSE(LIBDL_FOUND)
SET( LIBDL_LIBRARIES )
ENDIF(LIBDL_FOUND)
MARK_AS_ADVANCED( LIBDL_LIBRARY LIBDL_INCLUDE_DIR )

然后,只要在cmake模塊路徑中有它,就可以找到它如下:

find_package(LIBDL REQUIRED)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM