Qt Creator 找不到具有自定义 cmake 步骤的库
Qt Creator cannot find library with custom cmake step
在Qt Creator(版本3.0.1,Qt版本5.2.1)中,我做了一个自定义cmake
步骤(而不是qmake
),使用以下CMakeLists.txt
文件:
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
。
所以我的问题是:为什么从命令行运行cmake
和make
有效,而在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)
相关文章:
- 使用VS Code和CMake Tools运行自定义命令
- 参数化自定义CMake工具链
- CMake 在 Windows 上的自定义位置上找不到 Boost
- 告诉CMake链接到自定义文件夹中的Boost
- 为了从自定义目录使用 CMake,我需要做什么?
- 通过cMake使用具有自定义文件扩展名的共享库
- 用于自定义调试构建的 CMake qt 输入库后缀
- 如何在cmake工具链文件中设置编译功能,以便已知的自定义编译器使用target_compile_features
- 在多个目标上 CMake 后期构建自定义命令?
- Cmake :几个使用自定义目标进行测试的项目
- Qt Quick + CMake + 自定义 QObject 导致对"vtable"的未定义引用
- 与 CLION、CMAKE、WSL 和自定义 Angstrom 工具链交叉编译 - "CLION TEST"期间的问题
- 无法弄清楚如何让 CMake 为自定义 clang 驱动程序拉入正确的标头
- CMAKE自定义目标仅运行一次
- Cmake:如何构建自定义编译器二进制文件,然后将其用于某些目标?
- CMAKE OS X CLION.如何链接自定义动态库
- cmake 如何在项目的 vcxproj 属性组中添加自定义条目?
- cmake 安装不会触发自定义命令
- CMake 在构建之前运行自定义命令?
- 预处理之后和使用CMake编译之前的自定义构建步骤