2011-01-06 87 views
1

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

 
undefined reference to `libssh2_session_init_ex' 
undefined reference to `libssh2_session_startup' 

如果我用C同样的事情,一切工作正常。

任何帮助?

以下是继build命令

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

+1

听起来像你没有链接到正确的图书馆。 – 2011-01-06 13:57:20

+0

向我们展示一些C++代码(尤其是调用未能链接的函数的部分)。另外,你使用Linux?哪个发行版/版本? – 2011-01-06 14:17:11

回答

2

将你的电话改为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

1

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