2012-09-20 104 views
0

我自己的共享库,我有我的CMakeLists.txt寻找我的共享库下面的代码libsieve.so包括通过CMake

set(CPPLIB_DIR "${CMAKE_SOURCE_DIR}/../core/build") 
find_library(CPPLIB_SIEVE_LIBRARY NAMES libsieve PATHS CPPLIB_DIR) 

但它失败,不会找我的媒体库。我有以下目录结构:

  • 核心
    • 编译:libsieve.so
  • 项目:CMakeLists.txt

我在做什么错?

回答

1

我不知道为什么cmake没有找到所需的库,但我可以建议一种方法,让它发生在帮助cmake-gui:如果第一次运行“配置”找不到图书馆,你可以手动将其指向所需的库(设置完整的绝对路径)。大多数情况下,这种解决方案适用于我。

另外,如果该库是使用一个工具链(例如Intel C++)构建的,而且您的项目正在使用另一个工具链(如clang)构建,则无法找到该库可能是由于项目之间的二进制不兼容和图书馆。

Upd。原来的问题是引用CPPLIB_DIR。它应该是:

find_library(CPPLIB_SIEVE_LIBRARY NAMES sieve PATHS ${CPPLIB_DIR}) 
+0

我正在用另一个cmake文件自己构建'libsieve.so'库。这可能是问题吗?它看起来像这样:'set(CMAKE_BUILD_TYPE“Release”)add_library(sieve SHARED Sieve.cpp)' – Reza

+0

当您为项目使用CMake时,库是否以libsieve.so编译对象的形式存在?如果不是,那显然是问题的原因,因为CMake实际上并没有编译你的代码,它只是创建makefile。 find_library查找已编译的对象,如果它现在不存在,它不会发现它。 – Dmitry

+0

是的,当然存在。这是奇怪的事情... – Reza

0

Cmake find_library期望您提供库名或库文件名。

通过为库名称添加“lib”前缀来混合两者。因此,您应该尝试用sievelibsieve.so替换libsieve

+0

谢谢你的回答。我尝试过,但没有奏效。我甚至使用绝对路径,但仍没有找到任何库。 – Reza