gpt4 book ai didi

c++ - cmake在ubuntu上链接共享库

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:04 27 4
gpt4 key购买 nike

您好,我在使用 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 正确链接这两个共享库。任何人都知道出了什么问题。

干杯,迈克

最佳答案

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

关于c++ - cmake在ubuntu上链接共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26854004/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com