链接器无法从其他项目中找到库

时间:2020-09-18 09:29:55

标签: c linux cmake linker

伙计们, 我是CMake的新手,现在有一个我不了解的错误。实际上,我认为我对理解静态和共享库以及CMake的功能没有任何问题。但是目前...

所以在我的项目projB中,我想使用来自项目projA的static_library。 ProjA已经在我的板上进行编译,链接,安装和使用。对于ProjB,链接器找不到库“示例”。

我的问题:对我来说,我不明白为什么projA可以找到共享库,而projB却找不到。 错误代码:

Linking main ....
   ld: cannot find -lexample
   error: ld returned 1 exit status

我的projA文件夹结构:

include/ ... *.h (e. g. file.h)
src/ ... *.c (e. g. file.c)
CMakeFiles.txt

projA的CMakeLists.txt-文件:

cmake_minimum_required(VERSION 3.7)
PROJECT(projA)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
    
add_definitions(-g -O)
    
include_directories (include)
    
file (GLOB SOURCE_FILES src/*.c)
add_library (example STATIC ${SOURCE_FILES})
    
target_include_directories(example PUBLIC ${SOURCE_DIR}/include)
install(TARGETS example ARCHIVE DESTINATION usr/lib)

因此,projA稍后将成为可在许多其他项目中使用的库组件。这就是为什么创建的库不属于projB的原因,也是为什么我想在许多其他项目中导入/包含创建的example.a文件的原因。静态库example.a应该存储在usr / lib中。

在我的projB中,文件夹结构如下:

   CMakeFiles.txt
   main.c
   .... *.c

在我的main.c文件中,尝试将库包含在#中,这是我创建的库示例的一部分。

ProjB的CMakeFiles.text包含以下代码:

cmake_minimum_required(VERSION 3.7)

PROJECT(projB)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})

set (CMAKE_C_STANDARD   99)
set (CMAKE_CXX_STANDARD 14)

add_definitions(-g -O -fpermissive)

# build executable
file (GLOB SOURCES *.c )
add_executable (exe ${SOURCES})

# target_include_directories(exe PUBLIC ${CMAKE_SOURCE_DIR}/usr/lib)

# add_library(example SHARED IMPORTED)
# set_property(TARGET example PROPERTY IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/usr/libexample.a)

target_link_libraries (exe example pthread)

install (TARGETS exe RUNTIME DESTINATION usr/sbin)

发现错误的尝试已被注释掉。我也使用find_library(),但是找不到库“ example”。当然,我还将库示例构建为shared_library并搜索了.so等。

从我的示例中可以看到,这不是真实的代码(用于生产中),而是对我的问题的简化描述。我对系统性更感兴趣。想错了吗?

有人知道我还能尝试什么还是为什么不起作用?

是因为它们是不同的项目吗?我的意思是,该文件存在于我的系统上,但是没有找到...

非常感谢您的帮助!

问候 马赛厄斯

0 个答案:

没有答案