【问题标题】:Link error in converting qmake to cmake将 qmake 转换为 cmake 时出现链接错误
【发布时间】:2017-06-17 11:42:00
【问题描述】:

我在 Qt Creator(基于 Qt 5.8)中有一个使用 RTI DDS 库的简单项目。我的项目由 qmake 作为工具构建在 Qt 中成功构建和链接

现在我想用 cmake 构建工具构建我的项目。所以我写了下面的CmakeLists.txt。但我得到 RTI 库的链接错误。我带来了 qmake 和 cmake 文件。请告诉我我做错了什么;

qmake(.pro 文件):

QT += core
QT -= gui

DEFINES += "_GLIBCXX_USE_CXX11_ABI=0"
QMAKE_CXXFLAGS+=-std=c++11

TARGET = untitled
CONFIG += console
CONFIG -= app_bundle

TEMPLATE = app

SOURCES += main.cpp \
    datawriter.cpp \
    ../../../Repositories/tests/r.karimi/Publisher/data/IDLs/myIDL/myIDL.cxx \
    ../../../Repositories/tests/r.karimi/Publisher/data/IDLs/myIDL/myIDLImpl.cxx \
    ../../../Repositories/tests/r.karimi/Publisher/data/IDLs/myIDL/myIDLImplPlugin.cxx

HEADERS += \
    datawriter.h \
    ../../../Repositories/tests/r.karimi/Publisher/data/IDLs/myIDL/myIDL.hpp \
    ../../../Repositories/tests/r.karimi/Publisher/data/IDLs/myIDL/myIDLImpl.h \
    ../../../Repositories/tests/r.karimi/Publisher/data/IDLs/myIDL/myIDLImplPlugin.h


QMAKE_CXXFLAGS += -DRTI_UNIX
QMAKE_CXXFLAGS += -DRTI_LINUX
QMAKE_CXXFLAGS += -DRTI_64BIT

unix:LIBS += -L$$(NDDSHOME)/lib/x64Linux3gcc4.8.2 -lnddscd -lnddscored -lnddscpp2d -lrtidlcppd -lrtirsinfrastructured
INCLUDEPATH += .. \
                $$(NDDSHOME)/include/ndds/hpp \
                $$(NDDSHOME)/include \
                $$(NDDSHOME)/include/ndds \
                $$(NDDSHOME)/include/persistence \
                ../../../Repositories/tests/r.karimi/Publisher/data/IDLs/myIDL \

CMakeLists.txt

cmake_minimum_required(VERSION 3.7)
project(Publisher)

set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)

# Add RTI flags:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRTI_UNIX")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRTI_LINUX")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DRTI_64BIT")

macro(add_idl_files LIBNAME)
    include_directories($ENV{HOME}/tests/r.karimi/Publisher/data/IDLs/${LIBNAME})
    list(APPEND SOURCE_FILES $ENV{HOME}/tests/r.karimi/Publisher/data/IDLs/${LIBNAME}/${LIBNAME}.cxx)
    list(APPEND SOURCE_FILES $ENV{HOME}/tests/r.karimi/Publisher/data/IDLs/${LIBNAME}/${LIBNAME}Impl.cxx)
    list(APPEND SOURCE_FILES $ENV{HOME}/tests/r.karimi/Publisher/data/IDLs/${LIBNAME}/${LIBNAME}ImplPlugin.cxx)
    list(APPEND HEADER_FILES $ENV{HOME}/tests/r.karimi/Publisher/data/IDLs/${LIBNAME}/${LIBNAME}.hpp)
    list(APPEND HEADER_FILES $ENV{HOME}/tests/r.karimi/Publisher/data/IDLs/${LIBNAME}/${LIBNAME}Impl.h)
    list(APPEND HEADER_FILES $ENV{HOME}/tests/r.karimi/Publisher/data/IDLs/${LIBNAME}/${LIBNAME}ImplPlugin.h)
endmacro()

set(SOURCE_FILES src/main.cpp src/DataWriter.cpp)
set(HEADER_FILES include/DataWriter.h)

include_directories(
        include
        # RTI
        $ENV{NDDSHOME}/include
        $ENV{NDDSHOME}/include/ndds
        $ENV{NDDSHOME}/include/ndds/hpp
        $ENV{NDDSHOME}/include/persistence
)

# Add DDS Libs
add_idl_files(myIDL)

set(
        LIBS
        #RTI
        nddscd
        nddscored
        nddscpp2d
        rtidlcppd
        rtirsinfrastructured
)

link_directories(
        $ENV{NDDSHOME}/lib/x64Linux3gcc4.8.2
)
set(CMAKE_VERBOSE_MAKEFILE ON)

add_executable(${PROJECT_NAME} ${SOURCE_FILES} ${HEADER_FILES})
target_link_libraries(${PROJECT_NAME} ${LIBS})

链接错误:

.../libnddscored.so: undefined reference to `dlopen' 
.../libnddscored.so: undefined reference to `dlclose'
.../libnddscored.so: undefined reference to `dlerror'
.../libnddscored.so: undefined reference to `dlsym'  

提前感谢您的帮助。 雷扎

【问题讨论】:

标签: c++ qt cmake qmake


【解决方案1】:
.../libnddscored.so: undefined reference to `dlopen' 
.../libnddscored.so: undefined reference to `dlclose'
.../libnddscored.so: undefined reference to `dlerror'
.../libnddscored.so: undefined reference to `dlsym'

这些符号在-ldl 中定义。只需将${CMAKE_DL_LIBS} 添加到target_link_libraries()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多