【问题标题】:libssh2 and C++libssh2 和 C++
【发布时间】:2023-03-27 02:28:01
【问题描述】:

当我尝试在我的 C++ 类中使用 libssh2 时,我不断收到以下错误:

未定义对“libssh2_session_init_ex”的引用 未定义对“libssh2_session_startup”的引用

如果我使用 C 做同样的事情,一切都会正常。

有什么帮助吗?

以下是构建命令

g++ -Wall -g -I/libssh2-1.2.4/src -I/libssh2-1.2.4/include -L/libssh2-1.2.4/src/obj -L/openssl-0.9.8k/ -L/SecuritySDK/3.0.13/RC/LATEST/security/lib  -lssh2 -ldl -lnsl -lresolv -lhash -lhandlers -lcrypto -lssl -lz -lbpwp3   rhost.o rpipe.o rutils.o -o rpipe

下面是类成员函数

void rhost::InitSession()
{
    m_session = libssh2_session_init();
    if ( libssh2_session_startup(m_session, m_sock) )
    {
        fprintf (stderr, "Failure establishing SSH session\n");
        exit(-1);
    }
    return;
}

是的平台是linux

【问题讨论】:

  • 听起来你没有链接到正确的库。
  • 向我们展示您的一些 C++ 代码(尤其是调用无法链接的函数的部分)。另外,你用的是Linux吗?哪个发行版/版本?

标签: c++ libssh


【解决方案1】:

将您的电话改为g++ -Wall -g -I/libssh2-1.2.4/src -I/libssh2-1.2.4/include -L/libssh2-1.2.4/src/obj -L/openssl-0.9.8k/ -L/SecuritySDK/3.0.13/RC/LATEST/security/lib rhost.o rpipe.o rutils.o -o rpip -lssh2 -ldl -lnsl -lresolv -lhash -lhandlers -lcrypto -lssl -lz -lbpwp3

参数列表中库和目标文件的顺序很重要。阅读它here

【讨论】:

    【解决方案2】:

    如果 C 有效而 C++ 无效,那么听起来您未能将 libssh2 函数原型包含在 extern "C" {} 块中,如 here 所述。 (你应该仔细检查头文件;我有点惊讶它不使用extern "C" {} 本身。)

    【讨论】:

    • @Avinash:那么我怀疑你在构建中做错了什么。您需要提供有关如何构建代码的更多信息。
    • 当我说 C 工作时,我尝试了 libssh 提供的 C 语言示例,它们使用相同的构建命令。
    • @Avinash:您介意发布示例代码使用的确切构建命令吗?我想知道您是否以某种方式获得了未定义这些功能的不同 libssh2(由您的 Linux 发行版提供的?)...
    • 我没有使用 linux 发行版提供的 libssh2。我已经建立了自己的 libssh2
    • @Avinash:您是否使用 C 或 C++ 编译器构建 libssh2 本身?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 2012-09-06
    • 1970-01-01
    相关资源
    最近更新 更多