【问题标题】:CMake not finding .so libraryCMake 找不到 .so 库
【发布时间】:2016-10-28 19:26:29
【问题描述】:

我已经阅读了几个关于在 CMake 中包含 .so 库的线程(和文档),但在我看来,我并没有陷入我所读到的错误中,即:

  • 提供的库名称不正确
  • 指定的路径不正确

那我做错了什么?我在 Android Studio 中工作,我的 app 目录中有一个 cmake 文件。它可以找到一些东西,但找不到有问题的 .so 文件,其路径为:

app/src/main/cpp/libusb-android-open2/android/libs/armeabi/libusb1.0.so

这是我的 cmake 文件:

# This succeeds
add_library( demo-libusb SHARED src/main/cpp/demo-libusb.cpp )

# This succeeds
find_library( log-lib log )
if (log-lib)
    message(WARNING "HAS loglib") # This message gets printed
else(log-lib)
    message(SEND_ERROR "NO loglib")
endif(log-lib)

# This fails
link_directories( src/main/cpp/libusb-android-open2/android/libs/armeabi )
find_library( usb-lib NAMES usb1.0 libusb1.0.so )
if ( usb-lib )
    message(WARNING "HAS libusb")
else( usb-lib )
    message(SEND_ERROR "NO libusb") # This message gets printed
endif( usb-lib )

我也试过了:

find_library( usb-lib NAMES libusb1.0.so usb1.0 PATHS 
    src/main/cpp/libusb-android-open2/android/libs/armeabi
    src/main/cpp/libusb-android-open2/android/libs/armeabi-v7a
)

【问题讨论】:

  • 你已经读过这个CMake wiki article,不是吗?
  • @agg3l :我已经看过了,但也许你可以解释一下,因为我不清楚如何继续?首先,我没有使用包,而是使用.so 文件,我必须自己交叉编译。第二,你能告诉我LibXML++_LIBRARIES是什么意思吗?它应该是一个目录吗? .so 文件列表?
  • find_library 是否使用 PATH 的绝对值?
  • @Th.Thielemann:没有。

标签: android-studio linker cmake


【解决方案1】:

命令link_directories 不影响find_library 搜索路径。

您可以为find_library 使用PATHHINT 选项,或设置在search algorithm 中明确注明的变量。

【讨论】:

  • 谢谢。例如,您的意思是用-DCMAKE_LIBRARY_PATH=/home/markham/DroidEar/app/src/main/cpp/libusb-android-open2/android/libs/armeabi 运行cmake?恐怕我试过了,但没有更好的成功。
  • 我也尝试在我的find_library 电话中指定PATHSNAMES。我已经更新了我的 OP 以使用这些参数指示完整的调用。
  • 根据您的另一条评论,您执行交叉编译。查看有关路径的类似问题:stackoverflow.com/questions/40054495/….
猜你喜欢
  • 2015-11-14
  • 1970-01-01
  • 2018-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-12
  • 2011-12-26
相关资源
最近更新 更多