请问MinGW下如何结合Boost编译STLport 5.2.1?

耍宝王 2009-12-21 10:44:59
单单编译STLport 5.2.1我已经成功了
不过当我结合Boost再编译STLport时(原先的编译已删除)老是出现错误:
提示 error: boost/config.hpp: No such file or directory
.
.
.
等等,基本上就是找不到boost头文件路径

我已经做了一下内容
1、我已经在 stlport/stl/config/user_config.h中添加了宏 _STLP_USE_BOOST_SUPPORT

2、并在stlport/stl/type_traits.h中添加了boost/type_traits/remove_const.hpp
#ifdef _STLP_USE_BOOST_SUPPORT
# include <stl/boost_type_traits.h>
# include <boost/type_traits/add_reference.hpp>
# include <boost/type_traits/add_const.hpp>
# include <boost/type_traits/remove_const.hpp> //新添加的
#endif /* _STLP_USE_BOOST_SUPPORT */

3、配置了
configure --with-boost=/d/CPP_Lib/boost_1_36_0
4、编译
mingw32-make -f gcc.mak all

但就是出错,请高手帮帮忙
...全文
431 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
耍宝王 2010-01-13
  • 打赏
  • 举报
回复
看来时是没有办法解决了,我也只能“暂时”放弃了,结了吧
耍宝王 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 akirya 的回复:]
引用 9 楼 pgplay 的回复:
引用 7 楼 akirya 的回复:
追求纯粹的面向对象方式?
[/Quote]

那倒不是,毕竟对我来说“方便”是第一位的
不过我不是不代表别人不是
首先setlocale和std::locale不能混用,我现在还在学习阶段,但是若我学习的或者手痒想修改别人的代码,在其有C++代码有使用std::locale,那在我编译后运行报错,这就是一件很麻烦的事,查了半天结果不是我的问题……比如VC6中的getline函数输入要击两次回车的问题

[Quote=引用 11 楼 do_fork 的回复:]
引用 9 楼 pgplay 的回复:
引用 7 楼 akirya 的回复:
我觉得代码中不应该出现非ASCII字符
[/Quote]

什么意思啊?意思是要用ASCII编码来写代码吗?以前我是得,不过考虑到Unicode支持的字符比较多(包括一些数学符号之类的),就代码而言注解起数学公式方便,就程序而言控制台程序又不能像GUI程序那样(简单的)弄个图片上去代表某个特殊意义
do_fork 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pgplay 的回复:]
引用 7 楼 akirya 的回复:
那就奇怪了
C/C++ code#include <iostream>usingnamespace std;int main()
{
    setlocale(0 ,"chs" );
    wcout < < L"ab中国cc" < < endl;return0;
}

用VC不加任何编译参数。正常输出。
g++ test.cpp -finput-charset=gbk 也能正常输出。



用setlocale(0 ,"chs" );不论是在C还是C++中的确正常,但是setlocale不是面向对象的方式,而std::locale才是,不过一用就……

引用 8 楼 do_fork 的回复:
不是对unicode支持不好,而是默认是utf8编码,你的代码要用utf-8编码


我的代码本来用的就是UTF-8编码,不过反过来想,兴许我应该用UTF-16(就是Windows支持的Unicode版本)或者GB2312,毕竟MingGW使用的gcc是Linux东西,原生支持的是UTFf-8而不是UTF-16,但是Windows下的C库的Runtime是把UTF-16当成Unicode来对待的,但如果用UTF-8……报错是肯定的
[/Quote]

我觉得代码中不应该出现非ASCII字符
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pgplay 的回复:]
引用 7 楼 akirya 的回复:
那就奇怪了
C/C++ code#include <iostream>usingnamespace std;int main()
{
    setlocale(0 ,"chs" );
    wcout < < L"ab中国cc" < < endl;return0;
}

用VC不加任何编译参数。正常输出。
g++ test.cpp -finput-charset=gbk 也能正常输出。



用setlocale(0 ,"chs" );不论是在C还是C++中的确正常,但是setlocale不是面向对象的方式,而std::locale才是,不过一用就……

引用 8 楼 do_fork 的回复:
不是对unicode支持不好,而是默认是utf8编码,你的代码要用utf-8编码


我的代码本来用的就是UTF-8编码,不过反过来想,兴许我应该用UTF-16(就是Windows支持的Unicode版本)或者GB2312,毕竟MingGW使用的gcc是Linux东西,原生支持的是UTFf-8而不是UTF-16,但是Windows下的C库的Runtime是把UTF-16当成Unicode来对待的,但如果用UTF-8……报错是肯定的
[/Quote]
追求纯粹的面向对象方式?
耍宝王 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 akirya 的回复:]
那就奇怪了
C/C++ code#include<iostream>usingnamespace std;int main()
{
setlocale(0 ,"chs" );
wcout<< L"ab中国cc"<< endl;return0;
}

用VC不加任何编译参数。正常输出。
g++ test.cpp -finput-charset=gbk 也能正常输出。

[/Quote]

用setlocale(0 ,"chs" );不论是在C还是C++中的确正常,但是setlocale不是面向对象的方式,而std::locale才是,不过一用就……

[Quote=引用 8 楼 do_fork 的回复:]
不是对unicode支持不好,而是默认是utf8编码,你的代码要用utf-8编码
[/Quote]

我的代码本来用的就是UTF-8编码,不过反过来想,兴许我应该用UTF-16(就是Windows支持的Unicode版本)或者GB2312,毕竟MingGW使用的gcc是Linux东西,原生支持的是UTFf-8而不是UTF-16,但是Windows下的C库的Runtime是把UTF-16当成Unicode来对待的,但如果用UTF-8……报错是肯定的
do_fork 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pgplay 的回复:]
引用 3 楼 akirya 的回复:
mingw自带的就是sgi版的stl,干嘛还要另外整一个sgi版的stl

因为MinGW自带的stl对宽字符(Unicode)支持不好,像wcout和wprintf输出都会出错,而现在我在MinGW平台下,编写的大多是Unicode程序
[/Quote]

不是对unicode支持不好,而是默认是utf8编码,你的代码要用utf-8编码
  • 打赏
  • 举报
回复
那就奇怪了
#include <iostream>
using namespace std;
int main()
{
setlocale( 0 , "chs" );
wcout << L"ab中国cc" << endl;
return 0;
}


用VC不加任何编译参数。正常输出。
g++ test.cpp -finput-charset=gbk 也能正常输出。
耍宝王 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 akirya 的回复:]
引用 4 楼 pgplay 的回复:
引用 3 楼 akirya 的回复:
mingw自带的就是sgi版的stl,干嘛还要另外整一个sgi版的stl

因为MinGW自带的stl对宽字符(Unicode)支持不好,像wcout和wprintf输出都会出错,而现在我在MinGW平台下,编写的大多是Unicode程序

在VC下也不会正常输出的
得先调用一次 setlocale( 0 , "chs" );
[/Quote]

这个方法在C语言中是可行的

#include <stdio.h>
#include <locale.h>
int main( void )
{
setlocale( LC_ALL, "chs" );
wprintf( L"中国" );

return 0;
}


能编译,且运行正常

但在C++中,不用setlocale( 0 , "chs" );而用std::locale loc( "chs" );

#include <iostream>
#include <locale>

using namespace std;

int main()
{
const locale loc( "chs" );
wcout.imbue( loc );
wcout << L"中国" << endl;

return 0;
}


能编译,但执行结果是

terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

Process returned 3 (0x3) execution time : 0.110 s
Press any key to continue.
耍宝王 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 akirya 的回复:]
wcout等 在输出的时候会调用C运行库的函数wcstombs进行转换,这个时候就得依赖setlocale设置区域了。
[/Quote]

std::locale也是一样
setlocale一般是配合wprintf使用的
std::locale是配合std::wcout使用的
当然了,这是一种不成文的规定,但是setlocale和std::locale不能混用,所以这样能防止出现意外
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 pgplay 的回复:]
引用 10 楼 akirya 的回复:
引用 9 楼 pgplay 的回复:
引用 7 楼 akirya 的回复:
追求纯粹的面向对象方式?


那倒不是,毕竟对我来说“方便”是第一位的
不过我不是不代表别人不是
首先setlocale和std::locale不能混用,我现在还在学习阶段,但是若我学习的或者手痒想修改别人的代码,在其有C++代码有使用std::locale,那在我编译后运行报错,这就是一件很麻烦的事,查了半天结果不是我的问题……比如VC6中的getline函数输入要击两次回车的问题

引用 11 楼 do_fork 的回复:
引用 9 楼 pgplay 的回复:
引用 7 楼 akirya 的回复:
我觉得代码中不应该出现非ASCII字符


什么意思啊?意思是要用ASCII编码来写代码吗?以前我是得,不过考虑到Unicode支持的字符比较多(包括一些数学符号之类的),就代码而言注解起数学公式方便,就程序而言控制台程序又不能像GUI程序那样(简单的)弄个图片上去代表某个特殊意义
[/Quote]
wcout等 在输出的时候会调用C运行库的函数wcstombs进行转换,这个时候就得依赖setlocale设置区域了。
耍宝王 2009-12-22
  • 打赏
  • 举报
回复
用资源文件,*.rec就可以,先用编辑一个*.rc(纯文本格式的),然后编译成*.rec导入程序就可以了,不过程序在使用时还有另外写函数导入资源,Windows下有LoadResource和FindResource(或FindResourceEx)这两个API可以用,不过控制台程序能不能添加资源文件,我到没试过
do_fork 2009-12-22
  • 打赏
  • 举报
回复
我的意思是,程序代码中不应出现ASCII字符以外的字符,
所有用于显示的字符串,文本,不要硬编码进代码,而是以其它方式存储起来,
这么做好处很多,不但代码兼容性更好,替换字符串时,也不必动代码
taodm 2009-12-21
  • 打赏
  • 举报
回复
mingw的stl已经很好了,不需要折腾stlport
stlport也其实不需要boost支持,也没有必要再编译。
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pgplay 的回复:]
引用 3 楼 akirya 的回复:
mingw自带的就是sgi版的stl,干嘛还要另外整一个sgi版的stl

因为MinGW自带的stl对宽字符(Unicode)支持不好,像wcout和wprintf输出都会出错,而现在我在MinGW平台下,编写的大多是Unicode程序
[/Quote]
在VC下也不会正常输出的
得先调用一次 setlocale( 0 , "chs" );
耍宝王 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 akirya 的回复:]
mingw自带的就是sgi版的stl,干嘛还要另外整一个sgi版的stl
[/Quote]
因为MinGW自带的stl对宽字符(Unicode)支持不好,像wcout和wprintf输出都会出错,而现在我在MinGW平台下,编写的大多是Unicode程序
  • 打赏
  • 举报
回复
mingw自带的就是sgi版的stl,干嘛还要另外整一个sgi版的stl
jerflaw 2009-12-21
  • 打赏
  • 举报
回复
同意楼上,不需要配合boost再编译stlport。

我很喜欢stlport,支持楼主。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧