MSVC2005 +STLPort 编译ACE失败

   MSVC2005 +STLPort 编译ACE失败

这个问题应该在ACE5.65.7.5的的版本存在。目前我已经提交了bug,应该可以得到解决。

常看我Blog的人应该知道(就那么点浏览量,纯属吹牛),我是一个MSVCDinkumware STL的怀疑者,我一方面觉得某些实现不地道(和未来的标准BOOST的不一样),一方面我对他的性能也表示不认可。当然主要是由于实现不标准,会导致我在移植的时候不舒服,所以我现在了使用STLPort作为我默认的STL实现。

前几日倒霉,被狗日的流氓软件《桌面美化秀》整蛊(直接导致系统无法启动),重装了自己的机器,鉴于大家对于2005的很多功能的认可,我决定升级自己的MSVC2003成为2005。装之前忘记改变一个编译环境的成本是大把的。于是被迫重新编译大量的库,包括STLPortACE

由于俺使用STLPort,所以最开始要先编译STLPort,然后把MSVCinclude中,增加STLPortinclude,而且要调整到第一行,(这样才会默认优先使用SLTPort)。STLPort编译很顺利,编译到ACE出现了编译错误,如下:

1>h:/HaveFun/ACE/ACE-5.7.1/ACE_wrappers/ace/checked_iterator.h(42) :

error C2653: 'stdext' : is not a class or namespace name

1>h:/HaveFun/ACE/ACE-5.7.1/ACE_wrappers/ace/checked_iterator.h(42) :

error C2143: syntax error : missing ';' before '<'

1>h:/HaveFun/ACE/ACE-5.7.1/ACE_wrappers/ace/checked_iterator.h(42) :

error C4430: missing type specifier - int assumed. Note: C++ does not support

default-int

1>h:/HaveFun/ACE/ACE-5.7.1/ACE_wrappers/ace/checked_iterator.h(42) :

error C2988: unrecognizable template declaration/definition

 

 

为了这个bug,瞟了一下代码,初步认为是作者希望使用微软的的MSCVstdext::checked_array_iterator检查迭代器的函数 但是作者没有考虑俺们这些不使用微软默认Dinkumware STL的人。而ACE在这方面的宏处理应该有一些问题。然后上网google了一下这个问题,发现的确有同样的倒霉蛋,但是糟糕的是ACE好像解决了一次,后面又由于宏的调整出现了。

# if defined (_MSC_VER) && (_MSC_FULL_VER >= 140050000)

template <typename PTR>

stdext::checked_array_iterator<PTR>

ACE_make_checked_array_iterator (PTR buf, size_t len)

作者应该是只考虑了默认使用Dinkumware STLMSVC,所以这个代码应该改为:

//注意这儿增加了一个_STLPORT_VERSION 如果使用了STLPORT这个宏,这个宏应该起作用

# if (defined (_MSC_VER)) && (_MSC_FULL_VER >= 140050000) && (!defined (_STLPORT_VERSION))

// Checked iterators are currently only supported in MSVC++ 8 or better.

#  include <iterator>

# endif  /* _MSC_VER >= 1400 */

//这儿的修改和上面一样。

# if (defined (_MSC_VER)) && (_MSC_FULL_VER >= 140050000) && (!defined (_STLPORT_VERSION))

template <typename PTR>

stdext::checked_array_iterator<PTR>

先自己改了将就的用,也在ACEbugzilla提交了,等待反馈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章