CMake" TARGET_LINK_LIBRARIES找不到-lfoo"但它与另一个库位于同一目录中

时间:2015-12-09 19:51:35

标签: c++ gcc cmake clion

如上所述,我在编译使用一些动态库(.so)的c ++项目(使用CMake)时遇到问题。 我的目录中有3个库(即home/sources/lib/)。当我只告诉编译器(在CMake文件中)使用第一个lib(foo1.so)时,它可以工作(只有这个文件,顺序无关紧要)。但它不适用于任何其他库(foo2.sofoo2.so)。所有3个文件都有.so扩展名。

注意:目录和文件名已更改,但结构相同。 我正在使用的库不是由我编译/创建的,而是来自第三方。 (当它们被打破时无所谓,不是吗?)

这就是我的CMake文件的样子:

cmake_minimum_required(VERSION 3.3)
project(MyProj)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -pthread -m64")
INCLUDE_DIRECTORIES("/home/sources/include")
LINK_DIRECTORIES("/home/sources/lib")

set(SOURCE_FILES main.cpp)
add_executable(MyProj ${SOURCE_FILES})

TARGET_LINK_LIBRARIES(MyProj foo1.so)

将上述行更改为此内容不再有效:

TARGET_LINK_LIBRARIES(MyProj foo1.so foo2.so foo3.so)

另一种写作方式(没有帮助)

TARGET_LINK_LIBRARIES(MyProj foo1.so)
TARGET_LINK_LIBRARIES(MyProj foo2.so)
TARGET_LINK_LIBRARIES(MyProj foo3.so)

如上所述:所有3个库都在SAME目录中(我用LINK_DIRECTORIES引用)

这是我在尝试使用其他库进行编译时遇到的错误(仅表示只有foo1.so有效):

[ 50%] Linking CXX executable MyProj
/usr/bin/ld: cannot find -lfoo2
/usr/bin/ld: cannot find -lfoo3
collect2: error: ld returned 1 exit status
make[3]: *** [MyProj] Error 1
make[2]: *** [CMakeFiles/MyProj.dir/all] Error 2
make[1]: *** [CMakeFiles/MyProj.dir/rule] Error 2
make: *** [MyProj] Error 2

P.S。:我在发布之前做过一些研究,但是没有找到任何其他的这个"奇怪的"问题。可以肯定的是,我的CMake文件到目前为止还没有一些谷歌搜索技能^^

2 个答案:

答案 0 :(得分:4)

不确定,但在我看来,CMake正在寻找libfoo1.so而文件实际上是foo1.so(同样适用于foo2foo3

尝试"importing" libs:

add_library(foo1 SHARED IMPORTED)
set_property(TARGET foo1 PROPERTY IMPORTED_LOCATION "/home/sources/lib/libfoo1.so")
# same thing for foo2 and foo3 ...

target_link_libraries(MyProj foo1 foo2 foo3)

修改

还有可能提供图书馆的完整路径:

target_link_libraries(MyProj "/home/sources/lib/libfoo1.so"
                             "/home/sources/lib/libfoo2.so"
                             "/home/sources/lib/libfoo3.so")

答案 1 :(得分:-1)

首先,你必须重命名 foo1.so到libfool1.so

然后将其添加到您的CMakeLists.txt

<强> link_directories(&#34; /home/sources/lib/libfoo1.so")