peakzhang 发表于 2008-1-15 21:49:54

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

我的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 *)" (__imp_?write_n@ACE@@YAHPAXPBXIPAI@Z) referenced in function _main

fatal error LNK1120: 1 unresolved externals

不知哪位遇到过。

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


#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 : "index.html");
const char *p_server_hostname = (argc > 2 ? argv : "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;
iovec iov;

iov.iov_base = "Get ";
iov.iov_len = 4;

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

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

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

ssize_t n;

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

cin.get();

return peer.close() == -1 ? 1 : 0;
}

我用的是VC2005

peakzhang 发表于 2008-1-15 21:50:01

ace.lib是release版本的库,你是不是没设置debug版本的?

peakzhang 发表于 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.循序渐进,多学多实践,多提问,不要着急.

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

Jesse 发表于 2010-7-27 11:41:42

好建议。
页: [1]
查看完整版本: 使用ACE::write_n时编译有问题