Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 歌词';XmppPump编译问题_C++_G++_Compilation_Google Talk_Libjingle - Fatal编程技术网

C++ 歌词';XmppPump编译问题

C++ 歌词';XmppPump编译问题,c++,g++,compilation,google-talk,libjingle,C++,G++,Compilation,Google Talk,Libjingle,我刚开始用libjingle编写一个gtalk聊天机器人。让编译器查找XmppPump类调用的XmppClient类时遇到问题。XmppClient是由libjingle在talk/xmpp/XmppClient.h文件中提供的,但由于某些原因,它对我不起作用,最近一直让我感到沮丧。希望你们能帮助我 我使用的是libjingle-0.5.1,我的g++编译器版本是4.4.5。我的操作系统是Ubuntu 10.10,32位 下面是我如何编译代码的: g++-g-Werror-DPOSIX-DEX

我刚开始用libjingle编写一个gtalk聊天机器人。让编译器查找XmppPump类调用的XmppClient类时遇到问题。XmppClient是由libjingle在talk/xmpp/XmppClient.h文件中提供的,但由于某些原因,它对我不起作用,最近一直让我感到沮丧。希望你们能帮助我

我使用的是libjingle-0.5.1,我的g++编译器版本是4.4.5。我的操作系统是Ubuntu 10.10,32位

下面是我如何编译代码的:


g++-g-Werror-DPOSIX-DEXPAT_RELATIVE_PATH-DFEATURE_ENABLE_SSL-DHAVE_OPENSSL_SSL_H=1-I../include-I../misc/libjingle-0.5.1-I../misc/libjingle-0.5.1/talk/expat-2.0.0.0.1-I../misc/libjingle-0.5.1/talk/libjingle-0.5.1/srtp/include-L../L../lib-lpjingle-thread-lssl-o../o../bin/gtalk/libjingle/ob/obu/lib/local../misc/libjingle-0.5.1/talk/build/dbg/lib/libjingle.a../misc/libjingle-0.5.1/talk/build/dbg/libg/libexpat.a../misc/libjingle-0.5.1/talk/build/lib/libsrtp.a../misc/libjingle-0.5.1/talk/build/dbg/libxmpphelp.a

以下是错误消息:

../misc/libjingle-0.5.1/talk/build/dbg/lib/libxmpphelp.a(xmpppump.o): In function `XmppPump::XmppPump(XmppPumpNotify*)': xmpppump.cc:(.text._ZN8XmppPumpC2EP14XmppPumpNotify+0x6e): undefined reference to `buzz::XmppClient::XmppClient(talk_base::TaskParent*)' ../misc/libjingle-0.5.1/talk/build/dbg/lib/libxmpphelp.a(xmpppump.o): In function `XmppPump::XmppPump(XmppPumpNotify*)': xmpppump.cc:(.text._ZN8XmppPumpC1EP14XmppPumpNotify+0x6e): undefined reference to `buzz::XmppClient::XmppClient(talk_base::TaskParent*)' ../misc/libjingle-0.5.1/talk/build/dbg/lib/libxmpphelp.a(xmpppump.o): In function `XmppPump::DoLogin(buzz::XmppClientSettings const&, buzz::AsyncSocket*, buzz::PreXmppAuth*)': xmpppump.cc:(.text._ZN8XmppPump7DoLoginERKN4buzz18XmppClientSettingsEPNS0_11AsyncSocketEPNS0_11PreXmppAuthE+0xa9): undefined reference to `buzz::XmppClient::Connect(buzz::XmppClientSettings const&, std::basic_string, std::allocator > const&, buzz::AsyncSocket*, buzz::PreXmppAuth*)' ../misc/libjingle-0.5.1/talk/build/dbg/lib/libxmpphelp.a(xmpppump.o): In function `XmppPump::DoDisconnect()': xmpppump.cc:(.text._ZN8XmppPump12DoDisconnectEv+0x25): undefined reference to `buzz::XmppClient::Disconnect()' ../misc/libjingle-0.5.1/talk/build/dbg/lib/libxmpphelp.a(xmpppump.o): In function `XmppPump::SendStanza(buzz::XmlElement const*)': xmpppump.cc:(.text._ZN8XmppPump10SendStanzaEPKN4buzz10XmlElementE+0x2c): undefined reference to `buzz::XmppClient::SendStanza(buzz::XmlElement const*)' collect2: ld returned 1 exit status make: *** [../bin/gtalk_bot.bin] Error 1 ../misc/libjingle-0.5.1/talk/build/dbg/lib/libxmpphelp.a(xmpppump.o):在函数“xmpppump::xmpppump(XmppPumpNotify*)”中: xmpppump.cc:(.text._zn8xmmpppumpc2ep14xmpppumpnotify+0x6e):对“buzz::XmppClient::XmppClient(talk_base::TaskParent*)”的未定义引用 ../misc/libjingle-0.5.1/talk/build/dbg/lib/libxmpphelp.a(xmpppump.o):在函数“xmpppump::xmpppump(XmppPumpNotify*)”中: xmpppump.cc:(.text._zn8xmmpppumpc1ep14xmpppumpnotify+0x6e):对“buzz::XmppClient::XmppClient(talk_base::TaskParent*)”的未定义引用 ../misc/libjingle-0.5.1/talk/build/dbg/lib/libxmpphelp.a(xmpppump.o):在函数“xmpppump::DoLogin(buzz::XmppClientSettings const&,buzz::AsyncSocket*,buzz::PreXmppAuth*)”中: xmpppump.cc:(.text.zn8xmppump7dologinerkn4buzz18xmppclientsettingsepns0_11AsyncSocketEPNS0_11PreXmppAuthE+0xa9):对“buzz::XmppClient::Connect(buzz::XmppClientSettings const&,std::basic_string,std::allocator>const&,buzz::AsyncSocket*,buzz::PreXmppAuth*)的未定义引用 ../misc/libjingle-0.5.1/talk/build/dbg/lib/libxmpphelp.a(xmpppump.o):在函数“xmpppump::DoDisconnect()”中: xmpppump.cc:(.text.zn8xmppump12dodisconnectev+0x25):对“buzz::XmppClient::Disconnect()”的未定义引用 ../misc/libjingle-0.5.1/talk/build/dbg/lib/libxmpphelp.a(xmpppump.o):在函数“xmpppump::SendStanza(buzz::xmlement const*)”中: xmpppump.cc:(.text.zn8xmppump10sendstanzaepkn4buzz10xmlemente+0x2c):未定义对“buzz::XmppClient::SendStanza(buzz::xmlement const*)”的引用 collect2:ld返回了1个退出状态 make:**[../bin/gtalk_bot.bin]错误1 这是我的代码:

#include <string>
#include <iostream>
#include <assert.h>
#include <getopt.h>
#include "glog/logging.h"
#include "talk/base/thread.h"
#include "talk/base/physicalsocketserver.h"
#include "talk/base/socketaddress.h"
#include "talk/base/cryptstring.h"
#include "talk/base/ssladapter.h"
#include "talk/xmpp/jid.h"
#include "talk/xmpp/xmppclient.h"
#include "talk/xmpp/xmppclientsettings.h"
#include "talk/examples/login/xmpppump.h"
#include "talk/examples/login/xmppauth.h"
#include "talk/examples/login/xmppthread.h"

using namespace std;

int readCommandLineArguments(int argc, char **argv);
int getUserName(string *username);
int getPassword(string *password);

buzz::Jid serverJid;
string username;
string password;
string auth_cookie;


int main(int argc, char **argv){
 int status = 0;

 // use: GLOG_log_dir="log" ./gtalk_bot.bin
 google::InitGoogleLogging(argv[0]);

 talk_base::PhysicalSocketServer pss;
 talk_base::AutoThread main_thread(&pss);

 // Get the information we'll need to sign in
 buzz::Jid jid;
 talk_base::InsecureCryptStringImpl pass;
 buzz::XmppClientSettings xcs;
 XmppPump pump;
 //XmppHandler xhandler;

 status = readCommandLineArguments(argc, argv);

 if(username.empty()){
  // get the user name if there's none in the command line argument
  status = getUserName(&username);
 }
 jid = buzz::Jid(username);
 assert(jid.IsValid() || jid.node() != "");

 if(!username.empty() && password.empty()){
  // If username is provided, but the password isn't, ask for one.
  status = getPassword(&password);
 }
 pass.password() = password;

 // Turn on SSL
 talk_base::InitializeSSL();

 xcs.set_user(jid.node());
 xcs.set_resource("one_chat_bot"); //TODO: need to investigate what this is
 xcs.set_host(jid.domain());
 xcs.set_use_tls(true);
 xcs.set_pass(talk_base::CryptString(pass));
 xcs.set_server(talk_base::SocketAddress("talk.google.com", 5222));

 //xhandler.DoLogin(xcs, new XmppSocket(true), NULL);
// xhandler.DoLogin(xcs, new XmppSocket(true), NULL);
 main_thread.Run();
// xhandler.DoDisconnect();

 //delete objects here

 return 0;
}



int readCommandLineArguments(int argc, char **argv){
 int input = 0;
 int rc = 0;
 int options_index = 0;

 static struct option long_options[] = {
  {"username", required_argument, 0, 'u'},
  {"password", required_argument, 0, 'p'},
  {0, 0, 0, 0}
 };

 while((input = getopt_long(argc, argv, "u:p:", long_options, &options_index)) != -1 && rc == 0){
  switch(input){
   case 'u':
    if(optarg){
     username = optarg;
    }
    break;
   case 'p':
    if(optarg){
     password = optarg;
    }
    break;
   case '?':
   default:
    rc = 1;
    break;
  }
 }

 return rc;
}



int getUserName(string *username){
 int rc = 0;

 cout << "google username: ";
 cin >> *username;

 return rc;
}


int getPassword(string *password){
 int rc = 0;

 cout << "password: ";
 cin >> *password;

 return rc;
}
#包括
#包括
#包括

除了我的libjingle-0.5.1文件夹已经编译

gtalk_bot$ ls * bin: log include: lib: misc: expat-2.0.1 glog-0.3.1.tar.gz libjingle-0.4.0.tar.gz libjingle-0.5.1 libjingle-0.5.tar.gz srtp swtoolkit expat-2.0.1.tar.gz libjingle-0.4.0 libjingle-0.5 libjingle-0.5.1.zip scons-2.0.1.tar.gz srtp-1.4.4.tgz swtoolkit.0.9.1.zip obj: main.o XmppHandler.o src: main.cc main.o Makefile SConstruct XmppHandler.cc XmppHandler.h XmppSocket.cc XmppSocket.h test: gtalk_bot$ls* 箱子: 日志 包括: 库: 杂项: expat-2.0.1 glog-0.3.1.tar.gz libjingle-0.4.0.tar.gz libjingle-0.5.1 libjingle-0.5.tar.gz srtp swtoolkit expat-2.0.1.tar.gz libjingle-0.4.0 libjingle-0.5.1.zip scons-2.0.1.tar.gz srtp-1.4.4.tgz swtoolkit.0.9.1.zip obj: main.o XmppHandler.o src: main.cc main.o Makefile SConstruct XmppHandler.cc XmppHandler.h XmppSocket.cc XmppSocket.h 测试: 以下是libjingle的构建目录:

gtalk_bot/misc/libjingle-0.5.1/talk/build/dbg$ ls * lib: libexpat.a libjingle.a libsrtp.a libxmpphelp.a obj: base call examples libexpat.a libjingle.a libsrtp.a libxmpphelp.a login p2p relayserver session stunserver third_party xmllite xmpp staging: call login relayserver stunserver gtalk_bot/misc/libjingle-0.5.1/talk/build/dbg$ls* 库: libexpat.libjingle.libsrtp.libxmpphelp.a obj: 基本调用示例libexpat.a libjingle.a libsrtp.a libxmpphelp.a登录p2p中继服务器会话服务器第三方xmllite xmpp 登台: 调用登录relayserver服务器
非常感谢libjingle团队解决了我的问题。显然,静态库排序很重要。我只需要重新订购图书馆:

libxmpphelp.a  libjingle.a libexpat.a libsrtp.a
见“男子身份证”:

链接器将仅搜索存档 一次,在它所在的位置 在命令行上指定。如果 存档定义了一个符号,该符号是 在某个对象中未定义 出现在 命令行,链接器将包括 中的相应文件 档案文件但是,一个未定义的符号 在稍后出现在屏幕上的对象中 命令行不会导致链接器崩溃 再次搜索存档


现在,我可以编译我的应用程序了。希望其他人会觉得这很有用。

如果您能为我们提供目录结构,这将很有帮助好的,我添加了目录结构。希望能有帮助。请务必检查libjingle SVN trunk链接,以检查目录结构以及头文件和源文件所在的位置。此外,您可能需要将-frti添加到CCFlags。为我工作。@Randall:ld有--start-group和--end-group选项,当两个库相互依赖时,解决这些难题的难度会稍微小一些。