2016-03-03 366 views
0

我一直在努力转换一个windows qt4项目以使用qt5和cmake。我得到了我认为接近完成的内容,然后从链接器中不断发现“未定义的参考错误”。但我似乎无法让他们离开。包括的 是cmake文件。我是cmake和qt的新手。谢谢您的帮助。将项目转换为qt5和cmake未定义的引用'vtable for qt5和cmake

cmake_minimum_required(VERSION 3.0.0) 

project(JF-Cut) 


include(CheckCXXCompilerFlag) 
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) 
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) 
if(COMPILER_SUPPORTS_CXX11) 
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 
#elseif(COMPILER_SUPPORTS_CXX0X) 
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") 
else() 
     message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") 
endif() 


set(FIND_GLM ./FindGLM.cmake) 

# Find the QtWidgets library 
find_package(OpenCL REQUIRED) 
find_package(OpenGL REQUIRED) 
#find_package(GLM REQUIRED) 
#include_directories(${GLM_INCLUDE_DIRS}) 
#link_directories(${GLM_LIBRARY_DIRS}) 
#add_definitions(${GLM_DEFINITIONS}) 

find_package(Qt5 COMPONENTS Core Gui 
      OpenGL Xml Declarative 
      Widgets 
      REQUIRED 
      ) 
find_package(GLEW REQUIRED) 
find_package(Boost COMPONENTS system) 

#FIND_PATH(GLM_INCLUDE_DIR /usr/include) 

# Interoperation with clogs 
option(CLOGS " use clogs algorithms " OFF) 
if (CLOGS) 
    find_path(CLOGS_INCLUDE clogs/clogs.h) 
    find_library(CLOGS_LIB clogs) 
    include_directories(${CLOGS_INCLUDE}) 
    add_definitions(-DHAVE_CLOGS) 
endif() 

#set(CMAKE_AUTOMOC ON) 
#SET(CMAKE_AUTOUIC ON) 

add_definitions(-DUNICODE 
       -DQT_LARGEFILE_SUPPORT 
       -D__CL_ENABLE_EXCEPTIONS 
       -D__CL_ENABLE_DEBUG_ 
       -DQT_CORE_LIB 
       -DQT_GUI_LIB 
       -DQT_DLL 
       -DQT_XML_LIB 
       -DNOMINMAX 
       ) 

SET(CMAKE_INCLUDE_CURRENT_DIR ON) 
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) 

set(SOURCE 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/bench/mfi.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCMain.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCSetting.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QSetting.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCVisualizer.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QHoverPoints.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QProfile.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QTransferFunction1D.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QIO.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityCL.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityConsole.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityData.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityGL.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityMath.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityUI.cpp 

) 
set(HEADERS 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/bench/mfi.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/cl/cl_stacktrace.hpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/call_stack.hpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/call_stack_msvc.hpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/call_stack_gcc.hpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCSetting.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QError.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/StackWalker.hpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/StackWalker.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QSetting.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QStructure.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCVisualizer.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QHoverPoints.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QProfile.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QTransferFunction1D.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QIO.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityCL.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityConsole.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityData.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityGL.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityMath.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityUI.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_bfs_block.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_capacity.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_cut.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_excessflow.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_flow.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_tag.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_count_block.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_global_relabel.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_histogram.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_kmeans.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_push_relabel.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_push_relabel_fast.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_render_ray_casting.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_render_ray_casting_feature.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_render_ray_casting_preint.cl 
) 

Set (UI_FILES 
    ${CMAKE_CURRENT_SOURCE_DIR}/ui/Graph_Cut/QGCPanel.ui 
    ${CMAKE_CURRENT_SOURCE_DIR}/ui/Graph_Cut/QGCVisualizer.ui 
    ) 


QT5_WRAP_CPP(QGCPanel_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.h) 
qt5_wrap_ui(QGCPanel_ui_moc ${CMAKE_CURRENT_SOURCE_DIR}/ui/Graph_Cut/QGCPanel.ui) 

QT5_WRAP_CPP(QGCVisualizer_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCVisualizer.h) 
qt5_wrap_ui(QGCVisualizer_ui_moc ${CMAKE_CURRENT_SOURCE_DIR}/ui/Graph_Cut/QGCVisualizer.ui) 


QT5_WRAP_CPP(QGCWidget_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.h) 
QT5_WRAP_CPP(QTransferFunction1D_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QTransferFunction1D.h) 
QT5_WRAP_CPP(QProfile_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QProfile.h) 
QT5_WRAP_CPP(QHoverPoints_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QHoverPoints.h) 

QT5_WRAP_CPP(QCommon_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.h) 


add_library(QGCPanel 
      ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.cpp 
      ${QGCPanel_ui_moc}) 
target_link_libraries(QGCPanel Qt5::Widgets ${QGCPanel_hdr_moc} ${QCommon_hdr_moc}) 

add_library(QGCVisualizer 
      ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCVisualizer.cpp 
      ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.cpp 
      ${QGCVisualizer_ui_moc} ${QGCPanel_ui_moc} 
      ) 
target_link_libraries(QGCVisualizer 
         Qt5::Widgets 
         Qt5::Core 
         ${QGCVisualizer_hdr_moc} 
         ${QGCPanel_hdr_moc} 
         ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.h 
         ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.h 
         ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.h 
         ) 

add_library(QGCWidget 
      ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.cpp) 
target_link_libraries(QGCWidget Qt5::Widgets ${QGCWidget_hdr_moc}) 

add_library(QTransferFunction1D 
      ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QTransferFunction1D.cpp) 
target_link_libraries(QTransferFunction1D Qt5::Widgets ${QTransferFunction1D_hdr_moc}) 

add_library(QProfile 
      ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QProfile.cpp) 
target_link_libraries(QProfile Qt5::Widgets ${QProfile_hdr_moc}) 

add_library(QHoverPoints 
      ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QHoverPoints.cpp) 
target_link_libraries(QHoverPoints Qt5::Widgets ${QHoverPoints_hdr_moc}) 

add_library(QCommon 
      ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.cpp) 
target_link_libraries(QCommon Qt5::Widgets Qt5::Core ${QCommon_hdr_moc}) 


include_directories(${Boost_INCLUDE_DIR} 
        ${OpenCL_INCLUDE_DIRS} 
        ${CLOGS_INCLUDE} 
        ${OPENGL_INCLUDE_DIRS} 
        ${GLUT_INCLUDE_DIRS} 
        $(GLEW_INCLUDE_DIRS) 
        ) 
add_executable(test_build 
       ${SOURCE} ${HEADERS} 
       ${QGCVisualizer_ui_moc} 
       ${QGCPanel_ui_moc} 
       ) 
target_link_libraries(test_build 
    Qt5::Widgets Qt5::Xml Qt5::Core Qt5::Gui Qt5::OpenGL 
    Qt5::Xml Qt5::Declarative 
    ${GLM_INCLUDE_DIR} ${Boost_LIBRARIES} ${OpenCL_LIBRARIES} 
    ${QGCVisualizer} ${QGCPanel} ${QGCSetting} ${QGCWidget} 
    ${QTransferFunction1D} ${QProfile} ${QHoverPoints} ${QCommon} 
    ${CLOGS_LIB}/libclogs.so ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} 
    dl ${GLEW_LIBRARIES} 
) 

这是编译器正在探索的命令。

[ 94%] Linking CXX executable test_build 
/home/sansomk/anaconda/bin/cmake -E cmake_link_script CMakeFiles/test_build.dir/link.txt --verbose=1 
/usr/bin/c++ -std=c++11 CMakeFiles/test_build.dir/3rdParty/bench/mfi.cpp.o CMakeFiles/test_build.dir/Graph_Cut/QGCMain.cpp.o CMakeFiles/test_build.dir/Graph_Cut/QGCSetting.cpp.o CMakeFiles/test_build.dir/infrastructures/QSetting.cpp.o CMakeFiles/test_build.dir/Graph_Cut/QGCPanel.cpp.o CMakeFiles/test_build.dir/Graph_Cut/QGCVisualizer.cpp.o CMakeFiles/test_build.dir/Graph_Cut/QGCWidget.cpp.o CMakeFiles/test_build.dir/infrastructures/QHoverPoints.cpp.o CMakeFiles/test_build.dir/infrastructures/QProfile.cpp.o CMakeFiles/test_build.dir/infrastructures/QTransferFunction1D.cpp.o CMakeFiles/test_build.dir/templates/QCommon.cpp.o CMakeFiles/test_build.dir/utilities/QIO.cpp.o CMakeFiles/test_build.dir/utilities/QUtilityCL.cpp.o CMakeFiles/test_build.dir/utilities/QUtilityConsole.cpp.o CMakeFiles/test_build.dir/utilities/QUtilityData.cpp.o CMakeFiles/test_build.dir/utilities/QUtilityGL.cpp.o CMakeFiles/test_build.dir/utilities/QUtilityMath.cpp.o CMakeFiles/test_build.dir/utilities/QUtilityUI.cpp.o -o test_build -rdynamic /opt/Qt/5.5/gcc_64/lib/libQt5OpenGL.so.5.5.1 /opt/Qt/5.5/gcc_64/lib/libQt5Xml.so.5.5.1 /opt/Qt/5.5/gcc_64/lib/libQt5Declarative.so.5.5.1 -lboost_system -lOpenCL /home/sansomk/code/cuda/clogs-install/lib/libclogs.so -lGLU /usr/lib/nvidia-352/libGL.so -ldl -lGLEW /opt/Qt/5.5/gcc_64/lib/libQt5Widgets.so.5.5.1 /opt/Qt/5.5/gcc_64/lib/libQt5Gui.so.5.5.1 /opt/Qt/5.5/gcc_64/lib/libQt5Script.so.5.5.1 /opt/Qt/5.5/gcc_64/lib/libQt5Core.so.5.5.1 -Wl,-rpath,/opt/Qt/5.5/gcc_64/lib:/home/sansomk/code/cuda/clogs-install/lib:/usr/lib/nvidia-352 
CMakeFiles/test_build.dir/Graph_Cut/QGCPanel.cpp.o: In function `QGCPanel::QGCPanel(QWidget*)': 
QGCPanel.cpp:(.text+0x1d3): undefined reference to `vtable for QGCPanel' 
QGCPanel.cpp:(.text+0x1e5): undefined reference to `vtable for QGCPanel' 
CMakeFiles/test_build.dir/Graph_Cut/QGCPanel.cpp.o: In function `QGCPanel::~QGCPanel()': 
QGCPanel.cpp:(.text+0x339): undefined reference to `vtable for QGCPanel' 
QGCPanel.cpp:(.text+0x34b): undefined reference to `vtable for QGCPanel' 
CMakeFiles/test_build.dir/Graph_Cut/QGCPanel.cpp.o: In function `QList<QProfile*> QObject::findChildren<QProfile*>(QString const&, QFlags<Qt::FindChildOption>) const': 
QGCPanel.cpp:(.text._ZNK7QObject12findChildrenIP8QProfileEE5QListIT_ERK7QString6QFlagsIN2Qt15FindChildOptionEE[_ZNK7QObject12findChildrenIP8QProfileEE5QListIT_ERK7QString6QFlagsIN2Qt15FindChildOptionEE]+0x3c): undefined reference to `QProfile::staticMetaObject' 
CMakeFiles/test_build.dir/Graph_Cut/QGCVisualizer.cpp.o: In function `QGCVisualizer::QGCVisualizer(QWidget*)': 
QGCVisualizer.cpp:(.text+0x1d3): undefined reference to `vtable for QGCVisualizer' 
QGCVisualizer.cpp:(.text+0x1e5): undefined reference to `vtable for QGCVisualizer' 
CMakeFiles/test_build.dir/Graph_Cut/QGCVisualizer.cpp.o: In function `QGCVisualizer::~QGCVisualizer()': 
QGCVisualizer.cpp:(.text+0x25d): undefined reference to `vtable for QGCVisualizer' 
QGCVisualizer.cpp:(.text+0x26f): undefined reference to `vtable for QGCVisualizer' 
CMakeFiles/test_build.dir/Graph_Cut/QGCWidget.cpp.o: In function `QGCWidget::QGCWidget(QWidget*)': 
QGCWidget.cpp:(.text+0x535): undefined reference to `vtable for QGCWidget' 
QGCWidget.cpp:(.text+0x547): undefined reference to `vtable for QGCWidget' 
CMakeFiles/test_build.dir/Graph_Cut/QGCWidget.cpp.o: In function `QGCWidget::~QGCWidget()': 
QGCWidget.cpp:(.text+0x1f62): undefined reference to `vtable for QGCWidget' 
QGCWidget.cpp:(.text+0x1f74): undefined reference to `vtable for QGCWidget' 
CMakeFiles/test_build.dir/Graph_Cut/QGCWidget.cpp.o: In function `QGCWidget::initData(std::string const&)': 
QGCWidget.cpp:(.text+0x3f40): undefined reference to `QGCWidget::signalPartitionInitialized(unsigned long, float*)' 
QGCWidget.cpp:(.text+0x3f75): undefined reference to `QGCWidget::signalHistogramInitialized(unsigned long, float*)' 
CMakeFiles/test_build.dir/infrastructures/QHoverPoints.cpp.o: In function `QHoverPoints::QHoverPoints(QWidget*, QHoverPoints::PointShape)': 
QHoverPoints.cpp:(.text+0x58): undefined reference to `vtable for QHoverPoints' 
CMakeFiles/test_build.dir/infrastructures/QHoverPoints.cpp.o: In function `QHoverPoints::eventFilter(QObject*, QEvent*)': 
QHoverPoints.cpp:(.text+0x70b): undefined reference to `QHoverPoints::signalPointsChanged()' 
QHoverPoints.cpp:(.text+0xc46): undefined reference to `QHoverPoints::signalPointsChanged()' 
QHoverPoints.cpp:(.text+0xd25): undefined reference to `QHoverPoints::signalPointsChanged()' 
QHoverPoints.cpp:(.text+0xe03): undefined reference to `QHoverPoints::signalPointsChanged()' 
CMakeFiles/test_build.dir/infrastructures/QHoverPoints.cpp.o: In function `QHoverPoints::firePointChange()': 
QHoverPoints.cpp:(.text+0x21bd): undefined reference to `QHoverPoints::signalPointsChanged(QPolygonF)' 
CMakeFiles/test_build.dir/infrastructures/QHoverPoints.cpp.o: In function `QHoverPoints::load(std::string const&, QSize const&)': 
QHoverPoints.cpp:(.text+0x2a62): undefined reference to `QHoverPoints::signalPointsChanged()' 
CMakeFiles/test_build.dir/infrastructures/QProfile.cpp.o: In function `QProfile::QProfile(QWidget*)': 
QProfile.cpp:(.text+0x43): undefined reference to `vtable for QProfile' 
QProfile.cpp:(.text+0x55): undefined reference to `vtable for QProfile' 
CMakeFiles/test_build.dir/infrastructures/QProfile.cpp.o: In function `QProfile::~QProfile()': 
QProfile.cpp:(.text+0x575): undefined reference to `vtable for QProfile' 
QProfile.cpp:(.text+0x587): undefined reference to `vtable for QProfile' 
CMakeFiles/test_build.dir/infrastructures/QTransferFunction1D.cpp.o: In function `QTransferFunction1D::QTransferFunction1D(QWidget*)': 
QTransferFunction1D.cpp:(.text+0x1d5): undefined reference to `vtable for QTransferFunction1D' 
QTransferFunction1D.cpp:(.text+0x1e7): undefined reference to `vtable for QTransferFunction1D' 
CMakeFiles/test_build.dir/infrastructures/QTransferFunction1D.cpp.o: In function `QTransferFunction1D::resizeEvent(QResizeEvent*)': 
QTransferFunction1D.cpp:(.text+0x1364): undefined reference to `QTransferFunction1D::signalControlPointsChanged()' 
CMakeFiles/test_build.dir/infrastructures/QTransferFunction1D.cpp.o: In function `QTransferFunction1D::showEvent(QShowEvent*)': 
QTransferFunction1D.cpp:(.text+0x138e): undefined reference to `QTransferFunction1D::signalControlPointsChanged()' 
CMakeFiles/test_build.dir/infrastructures/QTransferFunction1D.cpp.o: In function `QTransferFunction1D::slotUpdateTransferFunction()': 
QTransferFunction1D.cpp:(.text+0x1558): undefined reference to `QTransferFunction1D::signalControlPointsChanged()' 
CMakeFiles/test_build.dir/templates/QCommon.cpp.o: In function `QCommon::QCommon()': 
QCommon.cpp:(.text+0x3b): undefined reference to `vtable for QCommon' 
QCommon.cpp:(.text+0x4d): undefined reference to `vtable for QCommon' 
CMakeFiles/test_build.dir/templates/QCommon.cpp.o: In function `QCommon::QCommon(QWidget*, QFlags<Qt::WindowType>)': 
QCommon.cpp:(.text+0xf6): undefined reference to `vtable for QCommon' 
QCommon.cpp:(.text+0x108): undefined reference to `vtable for QCommon' 
CMakeFiles/test_build.dir/templates/QCommon.cpp.o: In function `QCommon::~QCommon()': 
QCommon.cpp:(.text+0x181): undefined reference to `vtable for QCommon' 
CMakeFiles/test_build.dir/templates/QCommon.cpp.o:QCommon.cpp:(.text+0x193): more undefined references to `vtable for QCommon' follow 
collect2: error: ld returned 1 exit status 
make[2]: *** [test_build] Error 1 
make[2]: Leaving directory `/home/sansomk/code/cuda/JF-Cut/src/build' 
make[1]: *** [CMakeFiles/test_build.dir/all] Error 2 
make[1]: Leaving directory `/home/sansomk/code/cuda/JF-Cut/src/build' 
make: *** [all] Error 2 
+0

那么你得到的实际错误是什么? – villintehaspam

回答

0

我想我明白了。我通过创建目标链接库来使事情变得复杂。我的代码无法正常运行,但这是一个开始。我反而附加了生成的moc和ui文件。

cmake_minimum_required(VERSION 3.0.0) 

project(JF-Cut) 


include(CheckCXXCompilerFlag) 
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) 
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) 
if(COMPILER_SUPPORTS_CXX11) 
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 
#elseif(COMPILER_SUPPORTS_CXX0X) 
# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") 
else() 
     message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") 
endif() 


set(FIND_GLM ./FindGLM.cmake) 

# Find the QtWidgets library 
find_package(OpenCL REQUIRED) 
find_package(OpenGL REQUIRED) 
#find_package(GLM REQUIRED) 
#include_directories(${GLM_INCLUDE_DIRS}) 
#link_directories(${GLM_LIBRARY_DIRS}) 
#add_definitions(${GLM_DEFINITIONS}) 

find_package(Qt5 COMPONENTS Core Gui 
      OpenGL Xml Declarative 
      Widgets 
      REQUIRED 
      ) 
find_package(GLEW REQUIRED) 
find_package(Boost COMPONENTS system) 

#FIND_PATH(GLM_INCLUDE_DIR /usr/include) 

# Interoperation with clogs 
option(CLOGS " use clogs algorithms " OFF) 
if (CLOGS) 
    find_path(CLOGS_INCLUDE clogs/clogs.h) 
    find_library(CLOGS_LIB clogs) 
    include_directories(${CLOGS_INCLUDE}) 
    add_definitions(-DHAVE_CLOGS) 
endif() 

#set(CMAKE_AUTOMOC ON) 
#SET(CMAKE_AUTOUIC ON) 

add_definitions(-DUNICODE 
       -DQT_LARGEFILE_SUPPORT 
       -D__CL_ENABLE_EXCEPTIONS 
       -D__CL_ENABLE_DEBUG_ 
       -DQT_CORE_LIB 
       -DQT_GUI_LIB 
       -DQT_DLL 
       -DQT_XML_LIB 
       -DNOMINMAX 
       ) 

SET(CMAKE_INCLUDE_CURRENT_DIR ON) 
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) 

set(SOURCE 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/bench/mfi.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCMain.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCSetting.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QSetting.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCVisualizer.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QHoverPoints.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QProfile.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QTransferFunction1D.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QIO.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityCL.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityConsole.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityData.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityGL.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityMath.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityUI.cpp 

) 
set(HEADERS 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/bench/mfi.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/cl/cl_stacktrace.hpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/call_stack.hpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/call_stack_msvc.hpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/call_stack_gcc.hpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCSetting.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QError.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/StackWalker.hpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/stacktrace/StackWalker.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QSetting.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QStructure.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCVisualizer.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QHoverPoints.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QProfile.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QTransferFunction1D.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QIO.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityCL.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityConsole.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityData.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityGL.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityMath.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/utilities/QUtilityUI.h 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_bfs_block.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_capacity.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_cut.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_excessflow.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_flow.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_compute_tag.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_count_block.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_global_relabel.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_histogram.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_kmeans.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_push_relabel.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_push_relabel_fast.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_render_ray_casting.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_render_ray_casting_feature.cl 
    ${CMAKE_CURRENT_SOURCE_DIR}/cl/GraphCut/graphcut_render_ray_casting_preint.cl 
) 


QT5_WRAP_CPP(QGCPanel_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCPanel.h) 
qt5_wrap_ui(QGCPanel_ui_moc ${CMAKE_CURRENT_SOURCE_DIR}/ui/Graph_Cut/QGCPanel.ui) 

QT5_WRAP_CPP(QGCVisualizer_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCVisualizer.h) 
qt5_wrap_ui(QGCVisualizer_ui_moc ${CMAKE_CURRENT_SOURCE_DIR}/ui/Graph_Cut/QGCVisualizer.ui) 

QT5_WRAP_CPP(QGCWidget_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/Graph_Cut/QGCWidget.h) 
QT5_WRAP_CPP(QTransferFunction1D_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QTransferFunction1D.h) 
QT5_WRAP_CPP(QProfile_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QProfile.h) 
QT5_WRAP_CPP(QHoverPoints_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/infrastructures/QHoverPoints.h) 
QT5_WRAP_CPP(QCommon_hdr_moc ${CMAKE_CURRENT_SOURCE_DIR}/templates/QCommon.h) 

LIST(APPEND SOURCE ${QGCPanel_hdr_moc} ${QCommon_hdr_moc} 
    ${QGCVisualizer_ui_moc} ${QGCPanel_ui_moc} 
    ${QGCVisualizer_hdr_moc} ${QGCPanel_hdr_moc} 
    ${QGCWidget_hdr_moc} ${QTransferFunction1D_hdr_moc} 
    ${QProfile_hdr_moc} ${QHoverPoints_hdr_moc} 
    ${QCommon_hdr_moc} 
    ) 

include_directories(${Boost_INCLUDE_DIR} 
        ${OpenCL_INCLUDE_DIRS} 
        ${CLOGS_INCLUDE} 
        ${OPENGL_INCLUDE_DIRS} 
        ${GLUT_INCLUDE_DIRS} 
        $(GLEW_INCLUDE_DIRS) 
        ) 

add_executable(test_build 
       ${SOURCE} ${HEADERS} 
       ) 
target_link_libraries(test_build 
    Qt5::Widgets Qt5::Xml Qt5::Core Qt5::Gui Qt5::OpenGL 
    Qt5::Xml Qt5::Declarative 
    ${GLM_INCLUDE_DIR} ${Boost_LIBRARIES} ${OpenCL_LIBRARIES} 
    ${CLOGS_LIB}/libclogs.so ${OPENGL_LIBRARIES} ${GLUT_LIBRARY} 
    dl ${GLEW_LIBRARIES} 
)