2017-06-17 1 views
0

J'ai un projet simple dans Qt Creator (basé sur Qt 5.8) utilisant les bibliothèques RTI DDS. Mon projet est construit avec succès et lié dans Qt par qmake comme outil de construction.Erreur de liaison lors de la conversion de qmake en cmake

Maintenant, je veux construire mon projet avec l'outil de construction cmake. Donc j'écris ci-dessous CmakeLists.txt. Mais je reçois l'erreur de lien aux bibliothèques RTI. J'ai apporté à la fois le fichier qmake et cmake. S'il vous plaît dites-moi ce que je fais mal;

qmake (fichier .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}) 

erreurs de lien:

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

Merci à l'avance pour votre aide. Reza

+1

Copie possible de [Nécessité de lier le projet cmake à la bibliothèque dl] (https://stackoverflow.com/questions/33678965/need-to-link-cmake-project-to-dl-library) – Tsyvarev

Répondre

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' 

Ces symboles sont définis dans -ldl. Il suffit d'ajouter ${CMAKE_DL_LIBS} à target_link_libraries().