2010-07-01 40 views
3

如何在Ubuntu Linux上的.la文件中转储符号?如何在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 

回答

4

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

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

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

,然后在.so文件,你可以用纳米来显示动态符号:

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

如果这是一个C++库,那么你可以使用-C标志去除C++函数名称。

+0

谢谢。但是当我尝试“nm -D libwebkit-1.0.so | grep Browser *”或“nm -D -C libwebkit-1.0.so | grep Browser *”时,我只能看到“U _ZN17Browser17testMsgEP14_WebKitWebView”。但在我的Browser.h中,(一个C++类)我有更多的公有和私有方法,而不仅仅是一个testMsg())。 – michael 2010-07-02 01:36:09

+0

这是你自己的Browser.h?如果是这样,这听起来像你在.h中的方法,但没有实现。 – richq 2010-07-09 18:43:43

相关问题