将cmake与共享(动态)库一起使用

时间:2017-02-20 19:52:21

标签: c makefile cmake cygwin

您好我正在尝试使用一个简单的共享库,我使用一个只包含main的文件。 (我首先运行cmake .哪个工作正常,并没有返回任何错误)

错误

$ make
Scanning dependencies of target myprog
[ 50%] Building C object CMakeFiles/myprog.dir/main.c.o
[100%] Linking C executable myprog.exe
/usr/lib/gcc/x86_64-pc-cygwin/5.4.0/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lhello-user
collect2: error: ld returned 1 exit status
clang-3.8: error: linker (via gcc) command failed with exit code 1 (use -v to see invocation)
make[2]: *** [CMakeFiles/myprog.dir/build.make:95: myprog.exe] Error 1
make[1]: *** [CMakeFiles/Makefile2:68: CMakeFiles/myprog.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

CMakeLists.txt文件

cmake_minimum_required(VERSION 2.8.8)
project(LIB_EXAMPLE)
set(CMAKE_C_COMPILER clang)
add_executable(myprog main.c)
target_link_libraries(myprog hello-user)

该库位于/usr/local/lib/libhello-user.dll.a

注意:我使用cygwin和cmake并制作。

1 个答案:

答案 0 :(得分:1)

将我的评论转化为答案

CMake/Tutorials/Exporting and Importing Targets

你要么:

  • 命名库的完整路径
    • CMake没有自动搜索
    • 您必须添加find_library(_lib_path NAMES hello-user)
    • 之类的内容
  • 或 - 更好 - 将它们放入IMPORTED目标

    cmake_minimum_required(VERSION 2.8.8)
    project(LIB_EXAMPLE)
    
    add_library(hello-user SHARED IMPORTED GLOBAL)
    set_target_properties(
        hello-user 
        PROPERTIES 
            IMPORTED_LOCATION /usr/local/lib/libhello-user.dll
            IMPORTED_IMPLIB   /usr/local/lib/libhello-user.dll.a
    )    
    
    add_executable(myprog main.c)
    target_link_libraries(myprog hello-user)