贝贝花花包包店,精品555皮具,钱夹,皮夹

字体:  

使用ACE::write_n时编译有问题

peakzhang 发表于: 2008-1-15 21:49 来源: ACE 开发者

我的ACE库编译通过了, 5.5的。
但代码中调用ACE::write_n时,链接会出现以下错误
error LNK2019: unresolved external symbol "__declspec(dllimport) int __cdecl ACE::write_n(void *,void const *,unsigned int,unsigned int *)" ([email=__imp_?write_n@ACE@@YAHPAXPBXIPAI@Z]__imp_?write_n@ACE@@YAHPAXPBXIPAI@Z[/email]) referenced in function _main

fatal error LNK1120: 1 unresolved externals

不知哪位遇到过。

代码基本上是按书上写的:

CODE:


#pragma comment(lib, "ace.lib")

#include <ace/ACE.h>
#include <ace/OS.h>
#include <ace/INET_Addr.h>
#include <ace/sock_connector.h>
#include <ace/sock_stream.h>
#include <ace/Time_Value.h>

#define BUF_SIZE 1024

int main(int argc, char* argv[])
{

ACE::init();

const char *p_pathname = (argc > 1 ? argv[1] : "index.html");
const char *p_server_hostname = (argc > 2 ? argv[2] : "ace.ece.uci.edu");

ACE_SOCK_CONNECTOR connector;
ACE_SOCK_Stream peer;
ACE_INET_Addr peer_addr;
ACE_Time_Value timeout(5);

if(peer_addr.set(80, p_server_hostname) == -1)
  return 1;

if (connector.connect(peer, peer_addr, &timeout) == -1)
{
  if(errno = ETIME)
  {
   int err = GetLastError();
   return 1;
  }
}

char buf[BUF_SIZE];
iovec iov[3];

iov[0].iov_base = "Get ";
iov[0].iov_len = 4;

iov[1].iov_base = (char*)p_pathname;
iov[1].iov_len = strlen(p_pathname);

iov[2].iov_base = " HTTP/1.0\r\n\r\n";
iov[2].iov_len = 13;

peer.sendv_n(iov, 3, &timeout);

ssize_t n;

while((n = peer.recv(buf, sizeof(buf) - 1, &timeout)) > 0)
{
  //buf[n] = '\0';
  //cout << buf;
  ACE::write_n(ACE_STDOUT, buf, n);  //如果把这句改为上面两句编译通过
}

cin.get();

return peer.close() == -1 ? 1 : 0;
}
我用的是VC2005

最新回复

peakzhang at 2008-1-15 21:50:01
ace.lib是release版本的库,你是不是没设置debug版本的?
peakzhang at 2008-1-15 21:51:38
我学ACE遇到的几个问题:

1、安装的问题。

   查阅了相当多的文档与反复make了N遍,在我的linux上可以用了,但我还是不保证,我做的完全正确,只是能够进行下一步了.

2.加入ACE到我的程序中.

  使用g++ -IACE -l... -L... ..... 可以正确的运行了.总不想每回vi + g++ 吧.

  要制作一个Makefile,以前那个可以自动编译任何.cpp的Makefile找不到了.

  尝试 linux + Eclipse + CDT ->ManageC++ Project + debug,不熟, 又查了好多文档, 总算跑起来了.

3.学习c++NPV, 每一章都是经典,字字玑珠.一章要反复看N遍.如果不是以前做过linux 上的网络服务程序,+设计模式的学习,+C++经典书的研究,我早就不行了.这两本书刚出版的时候,我看了看,又放下了,因为看不懂.

4.stone说的是个好办法,我更喜欢自己手工画.建议把书上的代码都画出来,而且,每段代码最少要画2个版本.一个是最简版,不要细节,不要代码,只要你看的懂的功能描述.第2个图要画主要流程的关键函数调用.只要正确流程的,不要分支异常处理的.

5.版本差异.我下的是最新版本,建议使用书上的版本.有些差异花了我很多时间,很有挫折感.

6.循序渐进,多学多实践,多提问,不要着急.

以上是我的学习经验,希望于你有益.