【问题标题】:Check which libraries are needed检查需要哪些库
【发布时间】:2016-04-14 17:28:06
【问题描述】:

如何检查我需要将哪些库与我的 Android 应用程序链接? 我的意思是我遇到了很多错误,例如 error: undefined reference to 'function_name',我需要手动解决它们 - 在库名称并将它们添加到我的项目中。但这并不总是有效,例如现在我尝试在 Android 上使用 Gstreamer 并获得一些未解决的依赖项,我不知道这些函数位于哪个库中:

  • 未定义对“g_simple_proxy_resolver_new”的引用
  • 未定义对“gst_preset_get_type”的引用

那么,我如何以及在哪里可以找到包含这些函数的库?

【问题讨论】:

  • 你谷歌变量类型,你应该能够通过查看该类型的示例代码找到要导入的内容
  • @FirstStep 如果您谈论函数名称,那么我已经尝试用谷歌搜索它们,但没有成功。
  • grep 函数是您的朋友。在编译器目录中搜索包含符号的头文件;并尝试在源文件中搜索符号。
  • @ThomasMatthews 好的,谢谢,我也已经使用了 grep。例如,我找到了一些包含此函数的头文件或源代码,但我找不到与头文件同名的库。接下来我需要做什么?

标签: android c++ makefile gstreamer ld


【解决方案1】:

我认为更好的方法是使用 readelf 和 grep 可能在 find 的帮助下..

find . -type f -name "*.so" | while read file; do echo $file; readelf -Ws $file | grep gst_preset_get_type; done 

输出:

./ext/alsa/.libs/libgstalsa.so ./ext/theora/.libs/libgsttheora.so    
./ext/cdparanoia/.libs/libgstcdparanoia.so ./ext/libvisual/.libs
/libgstlibvisual.so ./ext/ogg/.libs/libgstogg.so
49: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND gst_preset_get_type
518: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND gst_preset_get_type 
...
./gst/encoding/.libs/libgstencodebin.so
37: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND gst_preset_get_type
232: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND gst_preset_get_type

你可以在 /usr/lib 左右搜索..

也许您还缺少一些插件?尝试设置变量 GST_PLUGINS_PATH,它应该指向包含 gstreamer 插件(在运行时加载)的目录

【讨论】:

  • 我的链接器标志序列无效,问题出在这。在此之后,我总是使用你的命令来查找函数。谢谢,很有用!
猜你喜欢
  • 2018-03-14
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
  • 2014-12-28
  • 2010-09-14
  • 2012-03-11
  • 2012-10-26
相关资源
最近更新 更多