【问题标题】:Symbols not found during linking链接期间未找到符号
【发布时间】:2015-04-02 19:18:53
【问题描述】:

我有一个共享库 (Linux) 和一个链接到该库但没有找到符号的程序的问题 - 尽管它们在那里。这就是我所拥有的:

位于 /usr/lib 中的共享库“libetest.so”。当我做一个

 readelf -Ws /usr/lib/libetest.so.0

它给出(除了其他一些)这个输出:

54: 000052c0   905 FUNC    LOCAL  DEFAULT   11 ETEST_open_connection

现在我有一个使用 ETEST_open_connection() 的应用程序。当我用

构建它时
gcc lib_test.cpp -DENV_LINUX -letest

由于链接器错误而失败

lib_test.cpp:(.text+0x32): undefined reference to `ETEST_open_connection'

如前所示,符号就在那里!知道为什么会失败吗?

【问题讨论】:

    标签: linux gcc linker shared-libraries


    【解决方案1】:

    请尝试:

    gcc -DENV_LINUX -letest lib_test.cpp
    

    这应该是正确的参数顺序。

    【讨论】:

    • 抱歉,不,这并没有什么不同。同样使用 ++(因为它是一个 .cpp 文件)也不能解决这个问题......
    • 哦,好吧 ;) 那么你必须使用 g++。这里的 Tge 问题是 c++ 对此函数使用了不同的名称。您必须使用 extern "C" 声明它,以便链接器为此函数使用 C 名称
    • 而 lib_test.cpp 正好包含这个头文件?
    • 是的...更有趣的是:它是从另一个正在运行的项目中复制而来的(名称/符号当然已更改)。
    • 是的...您的想法帮助我找到了原因,还有其他 #ifdef 条件阻止应用程序使用正确的导出定义 - 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    • 2014-12-26
    • 2020-10-24
    相关资源
    最近更新 更多