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创建的自定义库中对“vtable”的未定义引用_Cmake_Qt5 - Fatal编程技术网

使用cmake创建的自定义库中对“vtable”的未定义引用

使用cmake创建的自定义库中对“vtable”的未定义引用,cmake,qt5,Cmake,Qt5,我得到了错误:lib/libhrlLib.so:对'hrlQseqDev::waiting(bool,int)'的未定义引用以及其他一些错误。。。 我试图用cmake(3.7.2)而不是qmake(Qt5)来构建我的项目 CMakeLists.txt: project(${TARGET_NAME}) cmake_minimum_required(VERSION 3.1 FATAL_ERROR) set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_INCLUDE_

我得到了错误:lib/libhrlLib.so:对'hrlQseqDev::waiting(bool,int)'的未定义引用以及其他一些错误。。。 我试图用cmake(3.7.2)而不是qmake(Qt5)来构建我的项目

CMakeLists.txt:

project(${TARGET_NAME})

cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
set(CMAKE_VERBOSE_MAKEFILE ON)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_CXX_STANDARD 14)

set(POSITION_INDEPENDENT_CODE FALSE)

macro(NAMELIST erg in)
    set(os "")
    set(srcs ${in})
    separate_arguments(srcs)
    foreach(is ${srcs})
        set(os ${os} ${is})
    endforeach(is)
    set(${erg} ${os})
endmacro(NAMELIST)

macro(FINDMODULES erg in)
    set(os "")
    set(srcs ${in})
    separate_arguments(srcs)
    foreach(is ${srcs})
        find_package(Qt5${is} REQUIRED)
        set(os ${os} Qt5::${is})
    endforeach(is)
    set(${erg} ${os})
endmacro(FINDMODULES)

NAMELIST(SRCS ${TARGET_SRCS})
FINDMODULES(QLIBS ${QMODULES})

if(INC_PATH)
    NAMELIST(INCS ${INC_PATH})
    set(INCLUDES ${INCS})
endif(INC_PATH)

if(TARGET_EXTLIBS)
    NAMELIST(EXTRA_LIBS ${EXTRA_LIBS} "${TARGET_EXTLIBS}")
endif(TARGET_EXTLIBS)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)

include_directories(${INCLUDES})

if(BUILD_LIB)
    set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "-shared")
    set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "-shared")

    add_library(${TARGET_NAME} SHARED ${SRCS})
    target_link_libraries(${TARGET_NAME} ${QLIBS} ${EXTRA_LIBS})
    set_property(TARGET ${TARGET_NAME} PROPERTY VERSION "1.0.0")
    set_property(TARGET ${TARGET_NAME} PROPERTY SOVERSION 1 )
    install(TARGETS ${TARGET_NAME} LIBRARY DESTINATION lib)
    install(TARGETS ${TARGET_NAME} LIBRARY DESTINATION lib NAMELINK_ONLY)
else()
    if(USE_LIB_PATH)
        add_executable(${TARGET_NAME} ${SRCS})
        target_link_libraries(${TARGET_NAME} -L${OUT_PATH}/lib lib${USE_LIB}.so.1
            ${QLIBS} ${EXTRA_LIBS})
    else()
        add_executable(${TARGET_NAME} ${SRCS})
        target_link_libraries(${TARGET_NAME} ${QLIBS} ${EXTRA_LIBS})
    endif(USE_LIB_PATH)
    install(TARGETS ${TARGET_NAME} RUNTIME DESTINATION bin)
endif(BUILD_LIB)
共享库由以下内容构建:

cmake -G "Unix Makefiles" -DINC_PATH:STRING="some includes" -DTARGET_EXTLIBS:STRING="sys libs" -DTARGET_NAME:STRING=LibName -DBUILD_LIB:BOOL=1 -DTARGET_SRCS:STRING="cpp- and c-file" -DQMODULES:STRING="Core Gui Widgets PrintSupport" -DOUT_PATH:STRING=InstallPath .. -DCMAKE_INSTALL_PREFIX=InstallPath >> /dev/null
当我尝试针对此共享库构建程序时,使用:

cmake -G "Unix Makefiles" -DINC_PATH:STRING="some includes" -DTARGET_EXTLIBS:STRING="sys libs" -DTARGET_NAME:STRING=ProgName -DBUILD_LIB:BOOL=0 -DTARGET_SRCS:STRING="cpp-file" -DQMODULES:STRING="Core Gui Widgets PrintSupport" -DOUT_PATH=InstallPath -DUSE_LIB:STRING="LibName" -DUSE_LIB_PATH:STRING="BuildPath of LibName" .. -DCMAKE_INSTALL_PREFIX=InstallPath >> /dev/null
我得到错误'lib/libhrlLib.so:未定义对…'的引用'。 当使用qmake构建库时,我没有收到此错误


如何修复此问题?

您是否已使用nm实用程序验证库中是否包含该符号?我已验证该符号以及其他许多符号。例如我自己的Widget.enderArea->nm-D../../../lib/libhrlLib.so.1.0.0 | grep'RenderArea'->。。。0000000000028d12 T_ZN10渲染器EA13按键事件EP9QKEYEVENT 0000000000028cd2 T_ZN10渲染器EA14鼠标移动事件0000000000028e9e T_ZN10渲染器EA15按键释放事件EP9QKEYEVENT 0000000000028556 T_ZN10渲染器EA15按键事件EP11QMOUSE事件0000000000027c3a T_ZN10渲染器EAP17QWidget 0000000000027c3a T_ZN10RenderAreaC2EP7QWidget U_ZTv10RenderareA和来自生成的错误:。。。对“渲染区域vtable”的未定义引用