在将共享库层次结构链接到可执行文件时,cmake链接错误

亚历克斯·贝洛斯(Alex Belous)

在我的项目中,我具有以下配置:

  • 低级共享库
  • 共享库,它是低级共享库的包装
  • 可执行文件

所以文件树是

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()

当执行make时,出现以下链接错误:

ld.exe:找不到-lMySharedLibrary

主要的CMakeLists.txt是:

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)

共享库的CMakeLists.txt低电平是:

###########################
#   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)

共享库的CMakeLists.txt包装是:

#######################
#   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)

可执行文件的CMakeLists.txt是:

####################
#   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)
AnatolyS

您有普通的类型错误MyShraedLibrary而不是MySharedLibrary

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将库链接到可执行文件时诊断未定义符号

来自分类Dev

将可执行文件链接到第三方依赖的共享库时的C ++ CMake未定义引用

来自分类Dev

如何将 32 位共享库(.so 文件)链接到 32 位可执行文件?

来自分类Dev

CMAKE:错误的链接器(g ++)用于可执行文件到CUDA库的链接

来自分类Dev

CMAKE:错误的链接器(g ++)用于可执行文件到CUDA库的链接

来自分类Dev

scp之后C ++可执行文件无法链接到共享库

来自分类Dev

cmake,无法运行与预编译共享库链接的可执行文件

来自分类Dev

Cmake:加载可执行文件时,动态链接器如何查找动态库?

来自分类Dev

cmake-是否可以在运行时将可执行文件链接到具有相对路径的共享库?

来自分类Dev

链接可执行文件中的共享库与另一个共享库

来自分类Dev

CMake:将不同的OpenCV库链接到同一项目的不同可执行文件

来自分类Dev

CMake:将静态库从子目录链接到另一个子目录中的可执行文件

来自分类Dev

从相同的源代码创建单独的目标文件,并使用CMake链接到可执行文件

来自分类Dev

从相同的源代码创建单独的目标文件,并使用CMake链接到可执行文件

来自分类Dev

链接可执行文件与共享库时,为什么GNU ld解析符号的方式不同?

来自分类Dev

无法链接到主可执行文件

来自分类Dev

构建并链接到可执行文件

来自分类Dev

将静态库的多个不兼容版本链接到一个可执行文件中

来自分类Dev

将静态库的多个不兼容版本链接到一个可执行文件中

来自分类Dev

如何将已编译的资源(.res)文件链接到可执行文件

来自分类Dev

g ++无法将.o文件链接到可执行文件

来自分类Dev

如何强制可执行文件链接动态库

来自分类Dev

将Qt DLL链接到多个可执行文件

来自分类Dev

将Qt DLL链接到多个可执行文件

来自分类Dev

CMake尝试将目录链接为可执行文件,如果它们的名称匹配

来自分类Dev

CMake尝试将目录链接为可执行文件,如果它们的名称匹配

来自分类Dev

在生成可执行文件时,为什么不输出我链接的库?

来自分类Dev

可执行符号链接到Linux中的非可执行文件的可能性?

来自分类Dev

如何将带有const参数的C ++函数或C ++结构链接到D可执行文件?

Related 相关文章

  1. 1

    将库链接到可执行文件时诊断未定义符号

  2. 2

    将可执行文件链接到第三方依赖的共享库时的C ++ CMake未定义引用

  3. 3

    如何将 32 位共享库(.so 文件)链接到 32 位可执行文件?

  4. 4

    CMAKE:错误的链接器(g ++)用于可执行文件到CUDA库的链接

  5. 5

    CMAKE:错误的链接器(g ++)用于可执行文件到CUDA库的链接

  6. 6

    scp之后C ++可执行文件无法链接到共享库

  7. 7

    cmake,无法运行与预编译共享库链接的可执行文件

  8. 8

    Cmake:加载可执行文件时,动态链接器如何查找动态库?

  9. 9

    cmake-是否可以在运行时将可执行文件链接到具有相对路径的共享库?

  10. 10

    链接可执行文件中的共享库与另一个共享库

  11. 11

    CMake:将不同的OpenCV库链接到同一项目的不同可执行文件

  12. 12

    CMake:将静态库从子目录链接到另一个子目录中的可执行文件

  13. 13

    从相同的源代码创建单独的目标文件,并使用CMake链接到可执行文件

  14. 14

    从相同的源代码创建单独的目标文件,并使用CMake链接到可执行文件

  15. 15

    链接可执行文件与共享库时,为什么GNU ld解析符号的方式不同?

  16. 16

    无法链接到主可执行文件

  17. 17

    构建并链接到可执行文件

  18. 18

    将静态库的多个不兼容版本链接到一个可执行文件中

  19. 19

    将静态库的多个不兼容版本链接到一个可执行文件中

  20. 20

    如何将已编译的资源(.res)文件链接到可执行文件

  21. 21

    g ++无法将.o文件链接到可执行文件

  22. 22

    如何强制可执行文件链接动态库

  23. 23

    将Qt DLL链接到多个可执行文件

  24. 24

    将Qt DLL链接到多个可执行文件

  25. 25

    CMake尝试将目录链接为可执行文件,如果它们的名称匹配

  26. 26

    CMake尝试将目录链接为可执行文件,如果它们的名称匹配

  27. 27

    在生成可执行文件时,为什么不输出我链接的库?

  28. 28

    可执行符号链接到Linux中的非可执行文件的可能性?

  29. 29

    如何将带有const参数的C ++函数或C ++结构链接到D可执行文件?

热门标签

归档