2016-08-09 5 views
1

In meinem Projekt zu ausführbar habe ich die folgende Konfiguration:Cmake Verbindungsfehler auf der Verknüpfung Shared Library Hierarchie

  • niedriges Niveau Shared Library
  • Shared Library, die ein Wrapper von niedrigem Niveau gemeinsam genutzte Bibliothek ist
  • ausführbare

so dass die Dateien Baum ist:

CMakeLists.txt 
SharedLibraryBase 
    CMakeLists.txt 
    inc 
     myLibBase.h -> defines MyLibBaseFunction() 
    src 
     myLibBase.cpp -> implements MyLibBaseFunction() 
MySharedLibrary 
    CMakeLists.txt 
    inc 
     myLib.h  -> defines MyLibFunction() 
    src 
     myLib.cpp  -> implements MyLibFunction() 
Executables 
    CMakeLists.txt 
    inc 
     main.h 
    src 
     main.cpp -> calls MyLibFunction() 

Wenn ich mache perform, erhalte ich einen folgenden Link-Fehler:

ld.exe: cannot find -lMySharedLibrary

die Haupt CMakeLists.txt ist:

cmake_minimum_required(VERSION 3.5) 

project(TestSharedLibraryProject) 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "my_outputs") 
message("Binary tree path : ${PROJECT_BINARY_DIR}") 
add_subdirectory(SharedLibraryBase) 
add_subdirectory(MySharedLibrary) 
add_subdirectory(Executables) 

die Low Level gemeinsame Bibliothek CMakeL ists.txt ist:

########################### 
# SharedLibraiesBase # 
########################### 
project(SharedLibraryBase) 

# include directories 
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${Boost_INCLUDE_DIRS} ${CMAKE_CURRENT_SOURCE_DIR}/inc) 

# find source files 
set(${PROJECT_NAME}_headers inc/myLibBase.h) 
set(${PROJECT_NAME}_sources src/myLib.cpp) 

# create shared library 
add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_headers} ${${PROJECT_NAME}_sources}) 

# add files to export to 'include' 
set_property(TARGET ${PROJECT_NAME} PROPERTY PUBLIC_HEADER inc/myLibBase.h) 

install (TARGETS ${PROJECT_NAME} 
     RUNTIME DESTINATION bin 
     LIBRARY DESTINATION lib 
     ARCHIVE DESTINATION lib/static 
     PUBLIC_HEADER DESTINATION include) 

die Wrapper Shared Library CMakeLists.txt ist:

####################### 
# SharedLibraies # 
####################### 
project(MySharedLibrary) 

# include directories 
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${Boost_INCLUDE_DIRS} inc ../SharedLibraryBase/inc) 

# find source files 
set(${PROJECT_NAME}_headers inc/myLib.h) 
set(${PROJECT_NAME}_sources src/myLib.cpp) 

# create shared library 
add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_headers} ${${PROJECT_NAME}_sources}) 

#dependency shared library (from this project) 
target_link_libraries(${PROJECT_NAME} SharedLibraryBase) 

# add files to export to 'include' 
set_property(TARGET ${PROJECT_NAME} PROPERTY PUBLIC_HEADER inc/myLib.h) 

install (TARGETS ${PROJECT_NAME} 
     RUNTIME DESTINATION bin 
     LIBRARY DESTINATION lib 
     ARCHIVE DESTINATION lib/static 
     PUBLIC_HEADER DESTINATION include) 

die ausführbare CMakeLists.txt ist:

#################### 
# Executables # 
#################### 
project(Executables) 

# include directories 
include_directories(${CMAKE_CURRENT_SOURCE_DIR} ${Boost_INCLUDE_DIRS}/inc ${CMAKE_CURRENT_SOURCE_DIR}/../MySharedLibrary/inc) 

set(${PROJECT_NAME}_headers inc/main.h) 
set(${PROJECT_NAME}_sources src/main.cpp) 

#create executable 
add_executable(${PROJECT_NAME} ${${PROJECT_NAME}_headers} ${${PROJECT_NAME}_sources}) 

#dependency shared library (from this project) 
target_link_libraries(${PROJECT_NAME} MyShraedLibrary) 

install (TARGETS ${PROJECT_NAME} 
     RUNTIME DESTINATION bin 
     LIBRARY DESTINATION lib 
     ARCHIVE DESTINATION lib/static) 

Antwort

3

Sie haben gewöhnliche geben Sie MyshraedLibrary statt MySharedLibrary

Fehler ein
Verwandte Themen