【问题标题】:qmake to cmake conversion and link errorsqmake 到 cmake 的转换和链接错误
【发布时间】:2012-11-24 18:19:21
【问题描述】:

我将一个项目从 qmake(最初我使用 qt-creator 在 mac/linux/win 上构建它)转换为 cmake,但出现很多链接错误。

例如:

架构 x86_64 的未定义符号: “runion(QtRegion const&, QtRegion const&)”,引用自: 3DView.cpp.o 中的 Q3DView::ReloadLineData() “pafrand(int)”,引用自:

我的 .pro 文件:

CONFIG += debug_and_release
QT            += core gui opengl
DEFINES       += _TEST1
TEMPLATE      = app
TARGET        = test
HEADERS       = xxx.h \
                xxxxxx.h \
                etc.h
    Libs/include/generic/xxxxxx.h

SOURCES       = xxxx.cpp \
                xxx.cpp \
                xxxx.cpp 

INCLUDEPATH   += Libs/include
INCLUDEPATH   += ../plugin/srv

RESOURCES     = resource.qrc

##### LINUX
unix:!macx:INCLUDEPATH += . /usr/local/include/boost  
unix:!macx:LIBS += -L/usr/local/lib
unix:!macx:LIBS += -lboost_system -lboost_thread
!win32:!macx: LIBS = -lGL -lGLU
########

#### MAC
macx:INCLUDEPATH += . /usr/local/include/boost
macx:LIBS += -L/usr/local/lib
macx:LIBS += -lboost_system-mt -lboost_thread-mt
macx:QMAKE_LFLAGS_RPATH += /usr/local/lib
####

QMAKE_CXXFLAGS_WARN_ON =

FORMS += \
    UI/xxx.ui \
    UI/xx.ui

还有我的 cmake 文件版本:

project( test )

cmake_minimum_required( VERSION 2.6 )

if(APPLE)
set(CMAKE_OSX_ARCHITECTURES x86_64)
ENDIF()

set ( CMAKE_BUILD_TYPE Debug )

add_definitions ( -Wall )

find_package ( Qt4 REQUIRED )

FIND_PACKAGE(Boost)
IF (Boost_FOUND)
    INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
    ADD_DEFINITIONS( "-DHAS_BOOST" )
ENDIF()

find_package(GLUT)
find_package(OpenGL)
IF(APPLE)
SET(CMAKE_CXX_LINK_FLAGS "-framework OpenGL -framework GLUT")
ENDIF(APPLE)

set ( test_HDRS
    xxxx.h
    xxxxxx.h
    xxxx.h
    )

set ( test_SRCS
    xxxxx.cpp
    xxx.cpp
    xxxxx.cpp
    )

set ( test_UIS
    UI/xx.ui
    UI/xxxx.ui
    )
QT4_WRAP_UI(UIS ${test_UIS})

set ( test_RSCS
    resource.qrc
    )

QT4_ADD_RESOURCES(RSCS ${test_RSCS})

QT4_WRAP_CPP(MOCS ${test_HDRS})

INCLUDE(${QT_USE_FILE})
ADD_DEFINITIONS(${QT_DEFINITIONS})

include_directories (
    ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR}
    ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} ${QT_QTCORE_INCLUDE_DIR} ${QT_QTGUI_INCLUDE_DIR} ${QT_QTOPENGL_INCLUDE_DIR}
    Libs/include
    /usr/local/include/boost
    ../plugin/srv)

link_directories (
        /usr/local/lib
    )

add_executable ( test ${test_SRCS} ${UIS} ${RSCS} ${TRS} ${MOCS} )

target_link_libraries ( test  ${QT_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTCORE_LIBRARY} ${QT_QTGUI_LIBRARY} ${QT_QTOPENGL_LIBRARY} )

我尝试了许多我在网上找到的不同方法,但总是出现同样的问题。 有任何想法吗?谢谢

【问题讨论】:

  • 不需要与 QGIS 链接。我的 qmake 文件的“LINUX”部分不正确

标签: c++ qt linker cmake qmake


【解决方案1】:

您没有在您的CMakeLists.txt 中链接-lqgis_core -lqgis_gui。将qgis_coreqgis_gui 添加到target_link_libraries() 调用中。

【讨论】:

  • 我的错!!那里不需要 qgis。但问题是即使使用我的源文件,它也可以链接。如您所见,错误是关于我的源代码,而不是外部库。
  • 顺便说一句,您也没有链接 Boost 库。也许这是错误的原因?
  • 我不知道“reunion()”是什么。关于提升,“查找提升”位是否也处理链接?我如何添加它?正如您所说的那样,Boost 也是一个问题,但是即使在进入需要提升的文件之前,我也会遇到很多错误。即使在 boost 之前,与内部函数链接也会产生错误。
  • 查找 boost(或查找任何其他包)不会自动将库添加到您的 target_link_libraries。你需要自己做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
相关资源
最近更新 更多