cmake找不到静态库

Posted

技术标签:

【中文标题】cmake找不到静态库【英文标题】:cmake cannot find static library 【发布时间】:2011-07-04 07:48:39 【问题描述】:

g++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2

我有一个名为 sdpAPI.a 的静态库

我正在尝试使用 cmake 将我的 cpp 文件链接到它。

我的 CMakeLists.txt 看起来像这样?

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

PROJECT(demo_project CXX)

IF(CMAKE_COMPILER_IS_GNUCXX)
  SET(CMAKE_C_FLAGS "-Wall -Wextra -Wunreachable-code -O0 -D_DEBUG -ggdb -m32")
ENDIF(CMAKE_COMPILER_IS_GNUCXX)

INCLUDE_DIRECTORIES(sdpapi)
LINK_DIRECTORIES(~/projects/test_sdp/sdpapi)

SET(source_files main.cpp)
SET(libs sdpAPI)

ADD_EXECUTABLE(demo $source_files)

TARGET_LINK_LIBRARIES(demo $libs)

而我的 sdpAPI.a 位于这个目录 test_sdp/sdpapi/sdpAPI.a

我得到的错误如下:

[100%] Building CXX object CMakeFiles/demo.dir/main.cpp.o
Linking CXX executable demo                                                                                                                                   
/usr/bin/ld: cannot find -lsdpAPI                                                                                                                             
collect2: ld returned 1 exit status
make[2]: *** [demo] Error 1
make[1]: *** [CMakeFiles/demo.dir/all] Error 2
make: *** [all] Error 2

谁能看出我做错了什么明显的事情。

【问题讨论】:

有同样的错误。通过将add_subdirectory(LibrarySubDir) 添加到我的 CMakeLists.txt 来解决它 【参考方案1】:

我应该将sdpAPI.a 重命名为libsdpAPI.a

这解决了我的问题。一个愚蠢的错误,花了我 3 个小时。

希望这对其他人有所帮助。

【讨论】:

我只是在输入那个答案。每当 gcc 查找带有 -l 标志的库时,它都希望以 lib(name).a 的形式找到一个库 感谢您的评论。以后我会记住的。 谢谢,找到这个条目为我节省了一些时间!【参考方案2】:

对先前答案的附加建议。

要了解编译/链接发生了什么,只需运行带有 VERBOSE=1 选项的 make 即可查看 make 使用的完整命令。

当然还有gcc的链接选项

【讨论】:

谢谢,这很有用。【参考方案3】:

使用$ENVHOME 代替~

【讨论】:

以上是关于cmake找不到静态库的主要内容,如果未能解决你的问题,请参考以下文章

opencv静态链接库cmake链接顺序问题

gdbserver 找不到静态库课程

如何静态链接到 libstdc++.喜欢升级的GCC的朋友快来看看

gcc找不到静态库中的函数

为啥找不到静态库头?

Pythonanywhere 'staticfiles' 不是有效的标记库:找不到模板库静态文件