【问题标题】:How can I dump symbols in .la file on Ubuntu Linux?如何在 Ubuntu Linux 上的 .la 文件中转储符号?
【发布时间】:2023-04-02 16:07:01
【问题描述】:

如何在 Ubuntu Linux 上转储 .la 文件中的符号?

我收到此链接错误:

main.c:(.text+0xbfb): undefined reference to `Browser_new'

我认为我的 main.c 链接到 libwebkit-1.0.la。那么如何确定 libwebkit-1.0.la 是否有符号“Browser_new”?

  CXXLD  libwebkit-1.0.la
  CCLD   Programs/GtkLauncher

【问题讨论】:

    标签: c++ linux ubuntu linker


    【解决方案1】:

    问题很可能是您使用的是 C 并且 libwebkit 具有 C++ 符号。与您在包含文件中看到的相比,C++ 符号名称将为 mangled

    无论如何,回答这个问题:.la 是一个 libtool 库。通常它指向一个 .so 文件:

    $ grep dlname libwebkit-1.0.la
    dlname='libwebkit-1.0.so'
    

    然后在 .so 文件上可以使用 nm 来显示动态符号:

    $ nm -D libwebkit-1.0.so
    ...
    

    如果这是一个 C++ 库,那么您可以使用 -C 标志来对 C++ 函数名称进行分解。

    $ nm -D -C libwebkit-1.0.so
    

    【讨论】:

    • 谢谢。但是当我尝试“nm -D libwebkit-1.0.so | grep Browser*”或“nm -D -C libwebkit-1.0.so | grep Browser*”时,我只看到“U _ZN17Browser17testMsgEP14_WebKitWebView”。但是在我的 Browser.h(一个 c++ 类)中,我有更多的公共和私有方法,而不仅仅是 1 个 testMsg())。
    • 这是您自己的 Browser.h 吗?如果是这样,听起来您在 .h 中有该方法,但没有实现。
    猜你喜欢
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多