【问题标题】:cmake linking shared libraries on ubuntucmake在ubuntu上链接共享库
【发布时间】:2014-11-10 22:14:36
【问题描述】:

您好,我在使用 cmake 2.8.12 链接 ubuntu 上的两个库时遇到问题

目录结构

libraries
  \lib1
    CMakeLists.txt
    source1.cpp
  \lib2
    CMakeLists.txt
    source2.cpp
build

lib1 的 CMakeLists.txt

cmake_minimum_required(VERSION 2.8.4)
project(lib1)

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ../../build/)
set(BASE_DIR ../)
set(SOURCE_FILES source1.cpp)

include_directories ("${BASE_DIR}")
add_library(lib1 SHARED ${SOURCE_FILES})

target_include_directories (lib1 PUBLIC ${BASE_DIR})

这构建得很好。

然后对于 lib2 我有以下 CMakeLists.txt

cmake_minimum_required(VERSION 2.8.4)
project(lib2)

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ../../build)
set(BASE_DIR ../)
set(SOURCE_FILES
    source2.cpp)

include_directories ("${BASE_DIR}")

add_library(lib2 SHARED ${SOURCE_FILES})

# include lib1
list(APPEND CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
find_library(lib1 lib1)
target_link_libraries(lib2 LINK_PUBLIC lib1)

我来了

链接 CXX 共享库 ../build/liblib2.so

/usr/bin/ld: 找不到-llib1

我不清楚如何使用 CMake 正确链接这两个共享库。任何人都知道出了什么问题。

干杯,迈克

【问题讨论】:

    标签: c++ linux cmake shared-libraries dynamic-linking


    【解决方案1】:

    1) 如果你使用

     target_include_directories (lib1 PUBLIC ${BASE_DIR})
    

    为什么你认为你需要

     include_directories ("${BASE_DIR}")
    

    ?

    2) 试试这个:

    find_library(lib1_location lib1)
    message("Lib1 is at: ${lib1_location}")
    target_link_libraries(lib2 LINK_PUBLIC ${lib1_location})
    

    看看会发生什么。

    3) 见http://www.cmake.org/cmake/help/v3.0/manual/cmake-packages.7.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 2017-05-29
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 2016-06-06
      相关资源
      最近更新 更多