伙计们, 我是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等。
从我的示例中可以看到,这不是真实的代码(用于生产中),而是对我的问题的简化描述。我对系统性更感兴趣。想错了吗?
有人知道我还能尝试什么还是为什么不起作用?
是因为它们是不同的项目吗?我的意思是,该文件存在于我的系统上,但是没有找到...
非常感谢您的帮助!
问候 马赛厄斯