dongbangws 发表于 2008-1-18 02:14:53

有问题请教

有问题请教。我的代码是这样的:
struct ACE_DIR* base_dir = ACE_OS::opendir_emulation(this->dir.c_str());
struct ACE_DIRENT * dir;
dir = ACE_OS::readdir_emulation(base_dir);

每次编译都是
“opendir_emulation”:undeclared in namespace `ACE_OS';
“readdir_emulation” undeclared in namespace `ACE_OS';
所有的ACE_OS都报错。在vs2005下运行成功但是我用g++编译的时候出现这个问题。我操作系统是winXP,不知道是不是g++参数写错了 还是配置问题。请问这个g++参数该怎么写啊,谢谢
qq:437010643
sissi_0306@163.com

dongbangws 发表于 2008-1-18 02:15:29

有问题请教。我的代码是这样的:
struct ACE_DIR* base_dir = ACE_OS::opendir_emulation(this->dir.c_str());
struct ACE_DIRENT * dir;
dir = ACE_OS::readdir_emulation(base_dir);

每次编译都是
“opendir_emulation”:undeclared in namespace `ACE_OS';
“readdir_emulation” undeclared in namespace `ACE_OS';
所有的ACE_OS都报错。在vs2005下运行成功但是我用g++编译的时候出现这个问题。我操作系统是winXP,不知道是不是g++参数写错了 还是配置问题。请问这个g++参数该怎么写啊,谢谢
qq:437010643
sissi_0306@163.com

peakzhang 发表于 2008-1-18 11:43:35

好像是你g++的编译环境中,没有配置好文件包含路径,或者代码里面找不到引用路径导致。检查一下环境变量。

wengzuhong 发表于 2008-1-19 15:30:12

加 include ”ACE_OS.h“

yleesun 发表于 2012-11-12 09:04:46

这个问题有解吗?楼上的方法不可行。”ACE_OS.h“这个头文件,在ACE5.6以后的版本就没有了!

yleesun 发表于 2012-11-14 09:05:54

问题已经解决!
struct ACE_DIR* base_dir = ACE_OS::opendir_emulation(this->dir.c_str());
struct ACE_DIRENT * dir;
dir = ACE_OS::readdir_emulation(base_dir);
通过分析ACE源码,该ACE_OS::opendir_emulation还是不跨平台的,所以不能在linux上使用。在linux上使用,直接使用ACE_OS::opendir(this->dir.c_str());,该函数是跨平台,且效果相同。

freeeyes 发表于 2012-11-15 13:24:42

以后建议学会一种分析错误的方法。
比如编译报错,某些函数找不到,一般有几种方法,首先,确定这个函数是不是基础的函数,如果不是,那么是否是依赖第三方库,如果是,那么是不是第三方库的路径没有包含在其中,如果不是,则说明编译的第三方库没有此接口,检查第三方库。
因为在ACE中,有很多宏定义来区分不同平台上的API调用规则。如果发现了你在此平台上找不到的API,那么说明有些宏定义失效了,找一下你的ACE编译的,config.h里面的宏定义。
另外,ACE在很多AP中并不是完全跨平台的,有些实现甚至只是简单的返回-1,所以强烈建议使用的时候读一下接口的说明(一般在.h文件里面有)。
页: [1]
查看完整版本: 有问题请教