Profil de Libin绿色家园PhotosBlogListes Outils Aide

Blog


30 octobre

CAsyncsocket

异步SOCKET编程-发送和接收数据[转]
 
使用 WINSOCK 实现Windows下网络通信
 
Socket API,CAsyncSocket,CSocket内幕及其用法
 
Windows Sockets:使用 CAsyncSocket 类
 
 
 
15 octobre

C++开源跨平台类库集


在如下的库支持下,开发的系统可以很方便移植到当前大部分平台上运行
而无需改动,只需在对应的平台下 用你喜欢的编译器 重新编译即可

经典的C++库
   STLport-------SGI STL库的跨平台可移植版本,在以前有些编译器离符合
         标准比较远的情况下 那时还是有用的,当然目前vc71已经比较接近标准了,
         故目前不怎么用它了。
   Boost---------准标准库, 功能强大 涉及能想的到的大部分非特别领域的算法,
         有一个大的C++社区支持
   WxWindows-----功能强大的跨平台GUI库  ,它的功能和结构都类似 MFC,故原则上
      可以通过WxWindows把现有MFC程序移植到非Win平台下
   Blitz---------高效率的数值计算函数库 ,你可以订制补充你需要的算法
   Log4cpp-------日志处理  ,功能类似java中的log4j
   ACE-----------自适应通讯环境, 重量级的通讯环境库。
   Crypto++ -----加/解密算法库, 非常专业的C++ 密码学函式库
   CppUnit  ---  一个c++的单元测试框架  类似 java  的JUnit
   Loki -------  一个实验性质的库,尝试把类似设计模式这样思想层面的东西通过
        库来提供,他是C++的一个模板库,系C++"贵族", 它把C++模板的功能发挥到了极致

学术性的C++库:
   FC++ --------The Functional C++ Library  ,用库来扩充语言的一个代表作 ,模板库
   CGAL ------- Computational Geometry Algorithms Library计算几何方面的大部分重要的
     解决方案和方法以C++库的形式提供给工业和学术界的用户。


其它目前我感觉还不是很爽的C++库: 
   Doxygen  ----注释文档生成工具 ,可恨的是 我找不到 windows版本
   QT ----------大名顶顶的一个多平台的C++图形用户界面应用程序框架(GUI库)
          可气的是他的 Windows版 是商业发布的要付费
   xml4c--------IBM开发的XML Parser,系超重量级的, 适用大型应用中, 其DLL有 12M,恐怖吧
   Xerces c++ --Apache的XML项目, 但 只支持少数的字符编码,如ASCII,UTF-8,UTF-16等,
           不能处理包含中文字符的XML文档
   XMLBooster -----  也是一种  XML的 解析工具
   Fox   -------又一种开放源代码(C++)的GUI库,功能不是很强


C++开发环境(Win平台下除了 Visual C++ 和 Borland C++以外的):
   Cygwin  --------Windows下的一个Unix仿真环境
   MinGW   --------GCC的一个Windows移植版本
   Dev C++ -------- 一个C/C++ 的集成开发环境,在Windows上的C++编译器一直和标准有着一
        段距离的时候,GCC就是一个让Windows下开发者流口水的编译器。
   Eclipse-CDT  ----IMB 开发的一个集成开发环境,一般用来作为Java 开发环境,但由于
         Eclipse 是通过插件体系来扩展功能,这里我们 安装 CDT插件后,就可以用来作为
         C++ 的集成开发环境


-----------------------------------------------------------------------------------------
经典的C++库
-----------------------------------------------------------------------------------------
以下以 vc71环境 为例,其他环境 见各软件包的说明文档。

1.  STLport (SGI STL库的跨平台可移植版本。)
    -------http://www.stlport.org


vc71环境中编译安装
 版本:STLport-4.6.2.tar.gz
 copy vc71.mak makefile
 nmake clean all

头文件在 %STLport_root%/include\stlport
库文件在 %STLport_root%/lib

头文件添加方法如:
#i nclude   需要链接lib库


2  WxWindows  (跨平台的GUI库)
       --------http://www.wxwindows.org
       --------http://sourceforge.net/projects/wxwindows
       --------http://i18n.linux.net.cn/others/wxWindowstut/wxTutorial.html

  因为其类层次极像MFC,所以有文章介绍从MFC到WxWindows的代码移植以实现跨平台的功能。
通过多年的开发也是一个日趋完善的GUI库,支持同样不弱于前面两个库。并且是完全开放源代码的。新近
的C++ Builder X的GUI设计器就是基于这个库的。


vc71环境中编译安装
  版本:wxMSW-2.6.0-Setup.exe
  copy makefile.vc makefile
  通过 配置 config.vc 的 SHARED = 0 和 BUILD = debug
  确定 nmake clean all 的四种编译结果:

include头文件: include\wx
Lib库文件:  lib\vc_dll  和 lib\vc_lib
DLL: lib\vc_dll

头文件在 %wxWidgets_root%/include\wx
库文件在 %wxWidgets_root%/lib\vc_dll  和 %wxWidgets_root%/lib\vc_lib

头文件添加方法如:
#i nclude   需要链接lib库

3   boost  ("准"标准库)
   ------http://www.boost.org/
   ------http://sourceforge.net/projects/boost/

    Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程
的发动机之一。 Boost库由C++标准委员会库工作组成员发起,在C++社区中影响甚大,其成员已近2000人
。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的"准"标准库。

vc71环境中编译安装
  版本:boost_1_32_0.exe

首先进入 tools\build\jam_src 运行 build.bat  得到一个工具: bjam.exe
将其复制到 boost_root 目录下
执行 bjam "-sTOOLS=vc-7_1" stage 开始编译  (bjam "-sTOOLS=vc-7_1" install)

头文件在 %boost_root%/boost
库文件在 %boost_root%/stage\lib

头文件添加方法如:
#i nclude   有时要链接lib库


Boost中比较有名气的有这么几个库:
Regex
正则表达式库
Spirit
LL parser framework,用C++代码直接表达EBNF
Graph
图组件和算法
Lambda
在调用的地方定义短小匿名的函数对象,很实用的functional功能
concept check
检查泛型编程中的concept
Mpl
用模板实现的元编程框架
Thread
可移植的C++多线程库
Python
把C++类和函数映射到Python之中
Pool
内存池管理
smart_ptr
    5个智能指针,学习智能指针必读,一份不错的参考是来自CUJ的文章:
Smart Pointers in Boost,哦,这篇文章可以查到,CUJ是提供在线浏览的。

    Boost总体来说是实用价值很高,质量很高的库。并且由于其对跨平台的强调,对标准C++的
强调,是编写平台无关,现代C++的开发者必备的工具。但是Boost中也有很多是实验性质的东西,
在实际的开发中实用需要谨慎。并且很多Boost中的库功能堪称对语言功能的扩展,其构造用尽精
巧的手法,不要贸然的花费时间研读。Boost另外一面,比如Graph这样的库则是具有工业强度,
结构良好,非常值得研读的精品代码,并且也可以放心的在产品代码中多多利用。

3   blitz  (高效率的数值计算函数库)
   ------http://folk.uio.no/patricg/blitz/html/index.html
   ------http://www.oonumerics.org/blitz/
   ------http://sourceforge.net/projects/blitz/

Blitz++ 是一个高效率的数值计算函数库,它的设计目的是希望建立一套既具像C++ 一样方便,同时
又比Fortran速度更快的数值计算环境。通常,用C++所写出的数值程序,比 Fortran慢20%左右,因
此Blitz++正是要改掉这个缺点。方法是利用C++的template技术,程序执行甚至可以比Fortran更快。
Blitz++目前仍在发展中,对于常见的SVD,FFTs,QMRES等常见的线性代数方法并不提供,不过使用
者可以很容易地利用Blitz++所提供的函数来构建。

vc71环境中编译安装
  版本:blitz-0.8.tar.gz

将 blitz-0.8/Blitz-VS.NET.zip 解压到当前目录下
打开 Blitz-Library.sln  编译即可

头文件在 %blitz_root%/blitz
         %blitz_root%/random
库文件在 %blitz_root%/lib    (静态库)

头文件添加方法如:
#i nclude   有时要链接lib库
#i nclude   不需要lib库


4   log4cpp   (日志处理)
    -------http://sourceforge.net/projects/log4cpp/
    -------http://log4cpp.hora-obscura.de/index.php/Main_Page


   Log4cpp 是 Log4J 的 C++ 移植版本,开放源代码并且完全免费。与 Log4J 能够跨平台一样,Log4cpp
也致力于写出跨平台的 C++ 程序。Log4cpp 主要是用于 C++ 程序中写 log 文件,与此同时,Log4cpp 中
有很多有用的类库,对于写跨平台 C++ 程序的人来说,可以直接拿来用,或者作为自己写跨平台类的参考。
   Log4cpp 中的跨平台类库有明显的 Java 痕迹,比如 Class、Object 、Loader、Locale 等类。 Log4cpp
中的类都可以根据类名 new 出一个 instance,其实现的方式和 MFC 如出一辙:通过 C++ 强大的宏来实现。
   Log4cpp 中的跨平台类库主要有:
        信号类:Condition(broadcast,signal,wait),CriticalSection (lock,unlock),WaitAccess,
    Event(set,reset,wait),Mutex(lock,unlock), Semaphore(wait,tryWait,post)
        网络类:InetAddress,Socket,ServerSocket,DatagramSocket,SocketInputStream,
    SocketOutputStream
        日期类:DateFormat,DateTimeDateFormat,System(currentTimeMillis)
        文件类:FileWatchdog(doOnChange)
        内存操作类:基于引用计数机制的智能指针 ObjectPtrT
        字符串操作类:StrictMath,StringHelper(toUpperCase,toLowerCase,trim,equalsIgnoreCase
    ,endsWith,format),StringTokenizer
        线程类:Thread(start,run,join)
     
   使用以上的类不用考虑 thread handle, event handle, socket handle 之类的 handle 问题,所有这些文
件已经被封装了。很好用,对不对?
   不足之处在于没有 GUI 类。ANSI C++ 中对于目录等文件系统的处理功能较弱,这里面也没有目录处理类。
另外 Socket 的 read(void * buf, size_t len) 不能设置 timeout,并且如果读取数据个数小于 len 那么
read 函数将一直堵塞,不太好用,很可惜。实际的使用上面,可以考虑做一个 Socket 子类,重写 read() 函数。


vc71环境中编译安装
  版本:log4cpp-0.3.5rc1.tar.gz

   打开 msvc6  编译即可

头文件在 %log4cpp_root%/include\log4cpp
库文件在 %log4cpp_root%/lib

头文件添加方法如:
#i nclude   需要链接lib库


5   Crypto++   加/解密算法库
   ---http://sourceforge.net/projects/cryptopp/
   ---http://www.eskimo.com/~weidai/cryptlib.html
   ---http://www.cryptopp.com

   提供处理密码,消息验证,单向hash,公匙加密系统等功能的免费库。
Crypto++ 是一个非常专业的C++ 密码学函式库,几乎在密码学里头常见的演算法都可以在Crypto++
找到实作的函式,如:block 与stream  ciphers,hash functions,MACs,random number generators,
public key 加密...等方法

vc71环境中编译安装
  版本:cryptopp521.zip

直接通过 cryptest.dsw 相关的库

头文件在 %cryptopp_root%
库文件在 %cryptopp_root%/lib

头文件添加方法如:
#i nclude <*.h>  需要链接lib库

6   ACE

    ------http://www.cs.wustl.edu/~schmidt/ACE.html

    C+ +库的代表,超重量级的网络通信开发框架。ACE自适配通信环境(Adaptive Communication Environment)
是可以自由使用、开放源代码的面向对象框架,在其中实现了许多用于并发通信软件的核心模式。ACE提供了一组
丰富的可复用C++ 包装外观(Wrapper Facade)和框架组件,可跨越多种平台完成通用的通信软件任务,其中包括:
事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动
态(重)配置、并发执行和同步,等等。

7. CppUnit
    -------http://sourceforge.net/projects/cppuint/

  一个c++的单元测试框架,可以通过派生测试类的方式,定制具体的测试方案。xUnit家族的一员,
从JUnit移植而来,JUnit是Java语言的单元测试框架。

vc71环境中编译安装
  版本:cppunit-1.10.2.tar.gz

直接通过 CppUnitLibraries.dsw  编译相关的库

头文件在 %cppunit_root%/cppunit
库文件在 %cppunit_root%/lib

头文件添加方法如:
#i nclude   需要链接lib库

8    Loki
       -----http://moderncppdesign.com
       -----http://sourceforge.net/projects/loki-lib/
       ----- http://sourceforge.net/projects/loki-exp/

     其实可和Boost一起介绍它,一个实验性质的库。作者在loki中把C++模板的功能发
挥到了极致。并且尝试把类似设计模式这样思想层面的东西通过库来提供。同时还提供
了智能指针这样比较实用的功能。

   该库系模板库,库本身无需编译,在你的工程文件中 引用头文件就可以使用,
如果 你直接或间接使用了small object,那你需要在你的工程文件 加上 SmallObj.cpp
如果 你直接或间接使用了Singletons,那你需要在你的工程文件 加上 Singleton.cpp

-----------------------------------------------------------------------------------------
学术性的C++库:
-----------------------------------------------------------------------------------------
1     FC++: The Functional C++ Library
     --------http://www.cc.gatech.edu/~yannis/fc++/

  这个库提供了一些函数式语言中才有的要素。属于用库来扩充语言的一个代表作。如果想要在OOP之外寻找另
一分的乐趣,可以去看看函数式程序设计的世界。大师Peter Norvig在 "Teach Yourself Programming in
Ten Years"一文中就将函数式语言列为至少应当学习的6类编程语言之一。

   当前版本:FC++.1.5.zip
    模板库,在实际工程中 ,加上要用的头文件 就可以编译。

2     CGAL
      -----http://www.cgal.org

    Computational Geometry Algorithms Library的目的是把在计算几何方面的大部分重要的解决方案和方
法以C++库的形式提供给工业和学术界的用户。

    当前版本:CGAL-3.1.zip
   这是一个已编译的版本,当然也包括完整的源码

头文件在 %CGAL_root%/include/CGAL
库文件在 %CGAL_root%/lib/msvc7

头文件添加方法如:
#i nclude   需要链接lib库

-----------------------------------------------------------------------------------------
其它目前我感觉还不是很爽的C++库:
-----------------------------------------------------------------------------------------
1  Doxygen
     ------http://sourceforge.net/projects/doxygen/
     ------http://www.stack.nl/~dimitri/doxygen/

  注释文档生成工具,较之Doc++功能更为齐全,可以生成包括HTML、PDF、RTF在内的多种格式的文档,
并有GUI界面,除了支持c/c++语言外,还支持IDL、java、PHP、c#等。


2、   QT(windows版要付钱)
     -------http://www.trolltech.com/
     -------http://www.qiliang.net/qt.html

   Qt是Trolltech公司的一个多平台的C++图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形
用户界面所需的所用功能。Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。自从1996年早些时候,
Qt进入商业领域,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是流行的Linux桌面环境KDE
的基础,同时它还支持Windows、Macintosh、Unix/X11等多种平台。


3、Fox
   ---------http://www.fox-toolkit.org/
   开放源代码的GUI库。作者从自己亲身的开发经验中得出了一个理想的GUI库应该是什么样子的感受
出发,从而开始了对这个库的开发。有兴趣的可以尝试一下。


4  xml4c
    ------http://www.alphaworks.ibm.com/tech/xml4c

  IBM的XML Parser,用c++语言写就,功能超级强大。号称支持多达100种字符编码,能够支持中文,
适合于大规模的xml应用。若只是很小范围的应用,则非最佳选择,毕竟,你需要"背负"约12M左右的
dll的沉重负担

5    Xerces c++
       -------http://xml.apache.org/xerces-c

  Apache的XML项目,同样是c++ 实现,来源于IBM的xml4c,因此编程接口也是和xml4c一致的。但是
目前只支持少数的字符编码,如ASCII,UTF-8,UTF-16等,不能处理包含中文字符的XML文档。
   Xerces-C++ 是一个非常健壮的XML解析器,它提供了验证,以及SAX和DOM API。XML验证在文档类型定
义(Document Type Definition,DTD)方面有很好的支持,并且在2001年12月增加了支持W3C XML Schema
的基本完整的开放标准。

6   XMLBooster
      -------http://www.xmlbooster.com/

    这个库通过产生特制的parser的办法极大的提高了XML解析的速度,并且能够产生相应的GUI程序
来修改这个parser。在DOM和SAX两大主流XML解析办法之外提供了另外一个可行的解决方案。

-----------------------------------------------------------------------------------------
C++开发环境(Win平台下除了 Visual C++ 和 Borland C++以外的):
-----------------------------------------------------------------------------------------

1. Cygwin  (Windows下的一个Unix仿真环境)
    这个Cygwin的一部分是GCC的另外一个Windows移植版本,Cygwin是Windows下的一个Unix仿真环境。
严格的说是模拟GNU的环境,这也就是"Gnu's Not Unix"要表达的意思。

    至Cygwin的網站http://www.cygwin.com/下載安裝程式setup.exe,可直接點選執行或先行下載
至個人電腦後再執行。
    目前我已经下载到本地了,直接安装即可。

2.  MinGW  (GCC的一个Windows移植版本)
     1)http://sourceforge.net/projects/mingw 直接访问的,点击 Files,然后下载以下文
件:MinGW-3.1.0-1.exe, mingw32-make-3.80.0-3.exe。
安装MinGW 到 C:/MinGW 目录下,然后安装 mingw32-make 到 C:/MinGW 下,通过浏览器
到 C:/MinGW/bin 下,将 mingw32-make.exe 改名或者另外复制为 make.exe。

(以上的设置已经足够。不过为了求新,我是同时下载了 gcc-core-3.4.2-20040916-1.tar.gz,
 mingw-runtime-3.5.tar.gz 和 w32api-3.1.tar.gz,将它们直接解压到 C:/MinGW 下更新旧的
文件。不过这对这篇文章本身没有任何影响。新旧两种配置我都测试过。)

  安装次序:
     MinGW-3.1.0-1.exe
     mingw32-make-3.80.0-3.exe
     gcc-core-3.4.2-20040916-1.tar.gz
     mingw-runtime-3.5.tar.gz
     w32api-3.1.tar.gz
     gdb-5.2.1-1.exe
     mingw-utils-0.3.tar.gz
     binutils-2.15.91-20040904-1.tar.gz


   3)准备MinGW 用户开发的命令行环境(一个批处理)
如: mingw.bat
@rem --------------------------------------
@SET MINGW_ROOT=D:\Mingw

@rem
@echo Setting environment for using Mingw.
@rem

@set PATH=%MINGW_ROOT%\BIN;%PATH%
@set INCLUDE=%MINGW_ROOT%\INCLUDE;%MINGW_ROOT%\INCLUDE\c++\3.2.3;%MINGW_ROOT%\include\c++\3.2.3\mingw32;%MINGW_ROOT%\include\c++\3.2.3\backward;%INCLUDE%
@set LIB=MINGW_ROOT\LIB;%LIB%
@rem ----------------------------------------

3. Dev C++   (一个C/C++ 的集成开发环境)

   GCC是一个很好的编译器。在Windows上的C++编译器一直和标准有着一段距离的时候,GCC就是一个
让Windows下开发者流口水的编译器。Dev-C++就是能够让GCC跑在Windows下的工具,作为集成开发环
境,还提供了同专业IDE相媲美的语法高亮,代码提示,调试等功能。由于使用Delphi开发,占用内存
少,速度很快,比较适合轻量级的学习和使用。

   可以使用  MinGW-GCC 作为它的编译器


4  Eclipse-CDT

游戏开发

Audio/Video 3D C++ Programming Library

  ------http://www.galacticasoftware.com/products/av/
  ------http://sourceforge.net/projects/av3d/

***3D是一个跨平台,高性能的C++库。主要的特性是提供3D图形,声效支持(SB,以及S3M),控制接口(键盘,鼠标和遥感),XMS。

KlayGE

  ------http://home.g365.net/enginedev/
  ------http://sourceforge.net/projects/klayge/

   国内游戏开发高手自己用C++开发的一个开放源代码、跨平台的游戏引擎。KlayGE是一个开放源代码、跨平台的游戏引擎,并使
用Python作脚本语言。KlayGE在LGPL协议下发行。感谢龚敏敏先生为中国游戏开发事业所做出的贡献。

OGRE

  ------http://www.ogre3d.org
  ------http://www.ogre3d.org/docs/manual/
  ------ http://sourceforge.net/projects/ogre

 

  OGRE(面向对象的图形渲染引擎)是用C++开发的,使用灵活的面向对象3D引擎。它的目的是让开发者能更方便和直接地开发
基于3D硬件设备的应用程序或游戏。引擎中的类库对更底层的系统库(如:Direct3D和OpenGL)的全部使用细节进行了抽象,并提供了基于现实世界对象的接口和其它类。

转载于 http://www.gameluna.com/shownews.asp?id=144

『收藏』Bjarne Stroustrup's Homepage

Bjarne Stroustrup's Homepage


homepage | C++links | FAQ | technical FAQ | glossary | compilers | publications | C++TRs | TC++PL | D&E | bio | interviews | applications | TAMU | AT&T Research

Welcome to Bjarne Stroustrup's homepage!

Advice of the day
(from TC++PL)

25.9[10] Use node classes to incrementally augment an implementation; sec25.4.

FAQ of the day

What is "generic programming" and what's so great about it?

Article of the day

Learning Standard C++ as a New Language. C/C++ Users Journal. pp 43-54. May 1999.

I'm the College of Engineering Professor in Computer Science at Texas A&M University; you can find specific academic and educational information on and through my TAMU homepage. I also retain a link to AT&T Labs - Research as an AT&T Fellow.

I designed and implemented the C++ programming language. I remain active in the ISO C++ standards committee working on C++0x.

Over the years, I have written a few books (including The C++ Programming Language and The Design and Evolution of C++.), written a lot of papers, and given some interviews.

Here is

These pages are permanently under construction. Constructive comments are most welcome.

Fall talks

I can be reached by email at bs at cs.tamu.edu or bs at research.att.com, and by paper mail at Department of Computer Science, TAMU 3112, College Station, TX 77843-3112, USA.

homepage | C++links | FAQ | technical FAQ | glossary | compilers | publications | C++TRs | TC++PL | D&E | bio | interviews | applications | TAMU | AT&T Research

14 octobre

mingw+qt+stlport,升级gcc4.2.1的记录

I ,建立mingw环境

最先需要的当然是一个功能完善的mingw环境。这个工作可以通过下载并安装mingw发布的二进制安装包完成。下载地址:http://www.mingw.org

http://prdownloads.sf.net/mingw/

为了清楚理解, 我假设你把msys安装到了C盘C:\
这样,msys就将在如下位置: c:\msys

----------------------------------------
2 安装预编译的gcc二进制文件

现在我们已经有了一个基本的工作环境msys了。我们还需要安装gcc的某个版本,以利用它来编译得到最新的gcc版本。下载并安装下列文件。

来自GnuWin32工程:
bison:
http://prdownloads.sourceforge.net/gnuwin32/bison-2.1-bin.zip?download
flex:
http://prdownloads.sourceforge.net/gnuwin32/flex-2.5.4a-1-bin.zip?download
libiconv:
http://prdownloads.sourceforge.net/gnuwin32/libiconv-1.9.2-1-bin.zip?download
libintl:
http://prdownloads.sourceforge.net/gnuwin32/libintl-0.14.4-bin.zip?download

来自MinGW工程:
win32api:
http://prdownloads.sourceforge.net/mingw/w32api-3.7.tar.gz?download
mingw-runtime:
http://prdownloads.sourceforge.net/mingw/mingw-runtime-3.10.tar.gz?download
binutils:
http://prdownloads.sourceforge.net/mingw/binutils-2.17.50-20060824-1.tar.gz?download
gcc-core:
http://prdownloads.sourceforge.net/mingw/gcc-core-3.4.5-20060117-1.tar.gz?download

现 在开始安装。先在C盘下创建一个目录gcc, 后面将所有的文件都解压缩到这里。当然你可以下创建其它任何名称的目录。将所有文件都解压缩到gcc目录中。其中libiconv和libintl只需要 解压缩其中的包含了DLL的bin目录就行了,并将bin目录中的内容都复制到gcc/bin目录中。

重要提示:在解压缩完成后,到gcc/bin目录中,删除其中的m4.exe文件(msys使用另一个m4程序,它包含中msys的安装中)。

完成后,将c:\gcc\bin路径加入到系统的PATH路径中去。

注意,我们没有使用gcc-g++包, 这是因为编译gcc不需要C++支持。

这时候,可以测试一下安装是否正常了。打开msys并输入:
#gcc -v

这里输出的信息就是预编译gcc的信息。

3,下面开始安装QT
Qt软件的下载就不说了,在http://www.trolltech.com/网站上应该可以找到。我这里下载的是qt-win-opensource-4.3.0-mingw.exe这个包(目前最新版),下载完后直接执行安装,在安装过程中提示需要 输入mingw安装目录,需要提示的是要先修改c:\MinGW\include\w32api.h,把__W32API_VERSION改 成3.2,__W32API_MINOR_VERSION改成2,不然安装Qt的过程中会报错。

然后把把${MinGW}/bin和${Qt}/bin加到系统路径里cmd下进入${Qt}/bin,执行qtvars compile_debug,按指示完成配置,然后在同样目录里执行mingw32-make. 需要很长时间(我的破笔记本上超过二个小时。)
OK....
试运行

执行bin目录下的assistant程序,打开Qt的随机文档,进入Qt Reference Documentation->Tutorial & Examples->Qt Tutorial 1 - Hello World!,开始来执行第一个Qt程序。首先,将examples\tutorial\t1目录下的main.cpp复制到一个新的目录 下,然后从开始菜单中选择"程序"->"Qt by Trolltech v4.3.0 (OpenSource)"->"Qt 4.3.0 Command Prompt"进入到命令行窗口(注:也可以利用cmd来进入到命令行窗口,但通过这个程序进入,会设置好一些环境变量,更加方便。),cd到刚才保存 main.cpp的新目录,按照教程中所说的,执行以下两个命令:
qmake -project (这个命令用于产生.pro文件)
qmake (这个命令用于产生Makefile文件)
然后执行make指令,成功了,

目前的mingw上并不支持wcout,libstd++不支持,stlport 较早版本也不支持。
现在stlport5.1.3终于让mingw有了宽字符了!所以我要编译stlport
1、下载STLPort5.1.3并解压至C:\STLPort513, 下载网址:
http://sourceforge.net/projects/stlport
2启动CMD:
执行cd C:\STLPort510\build\lib, 作为当前目录便于操作;
执行configure -c gcc,配置编译环境,使用 gcc 编译器;
3执行 mingw32-make -fgcc.mak clean all,编译STLPort库,这一步比较耗时;
4、安装。
编译成功后,
执行mingw32-make -fgcc.mak install,这一步把编译好的动态库 copy 到 C:\STLPort513\bin目录,连接库 copy 到 C:\STLPort513\lib 目录;
执行 mingw32-make -fgcc.mak clobber,清除所有的临时文件。
5、把 C:\STLPort513\lib,C:\STLPort513\stlport 目录加入编译器的搜索路径的最前面,把 C:\STLPort513\bin 加入到系统path中,或者干脆把他们复制到系统文件夹。
6.注意事项:

  • STLport默认的编译目标all是只编译动态版本的 ,如果你只想要动态或者静态版本可以选择性编译。
  • mingw32-make -fgcc.mak clean 用来清除编译结果。
  • mingw32-make -fgcc.mak clobber 用来清除临时文件。
写个简单的代码:

#include <iostream>

using namespace std;

int main()
{
    wcout.imbue(locale(""));
    wcout << L"你好" << endl;
   
    return 0;
}

需要注意:

1.
源文件中有中文,我在vi中不能输入中文,所以是用Windows编辑工具写的。
这里有个编码问题,一般不指定就会自动保存为GB2312编码。
gcc将报错:converting to execution character set: Illegal byte sequence
因为gcc是按UTF-8编码读入源文件并输出可执行程序的。
使用 -finput-charset=GB2312 会产生一堆错误:
根源是:
In file included from .../stlport/stl/char_traits.h:43,
                 from .../stlport/stl/_iosfwd.h:22,
                 from .../stlport/iostream:38,
                 from main.cpp:2:
.../stlport/stl/_construct.h:46:39: failure to convert GB2312 to UTF-8

按理所包含的stlport头文件是纯ASCII,可以当GB2312处理,此处不明!
反正 -finput-charset=GB2312 不能解决问题。

将源文件保存为UTF-8就好了。我用notepad保存,再用UEdit去除头部3 个字节。
另外,在ide中应该这样配置,详细说一下 codeblocks 的设置情况。

1、设置编译器的搜索路径,把你的 STLPort\stlport,STLPort\lib放到搜索路径的最前面。
设置-->编译器和调试器设置:
-->Compiler settings-->其它选项:添加"-mthreads",不含引号。
-->Search directories,编译器:添加 STLPort\stlport 到最上面;连接器:添加 STLPort\lib 到最上面。
-->Linker settings, 添加 STLPort\lib 目录下的三个文件。
2、设置编辑器。设置-->编辑器-->常规设置,选择打开夜时的默认编码为:UTF-8。

现在编译、执行上面的代码,It's successful。

如果是命令行,执行

g++ -I%stl%\stlport -mthreads -O2 -c 2.cpp

g++ -L%stl%\lib -mthreads -O2 2.o -lstlport.5.1

我这里%stl%是stl目录,2.cpp是实例文件
应该说的很详细了^_^

过几天再写升级gcc,先把参考资料保存好~~
GCC已经release到4.2.1版本了。用GNU的话说,This release is a major release, containing new features (as well as many other improvements) relative to GCC 4.1.x .
看一下changes,在优化方面,增加了一个option,可以规定参数之间及参数与全局数据间的关系。不过这个option是在语言标准下自动运行的。我水平比较低,没有能理解这个optione 有什么用。
语言方面,OpenMP已经在C,C++,Fortran是被支持了,这下对并发是一个很好我支持吧。
还有两个改进,也是关于option的,是溢出和top-level的,不理解,不管了。
C语言里,有一个比较有用的option,-Waddress,能检测可疑内存地址的使用。不过,有什么具体的效果还不清楚。
C++有一些细节性的改动,如模板的模板参数。还有一个有用的Option,-Wextra,会在
if (a) ;
return 1;
return 0;
这样的代码里,给一个warnning。对新手可能比较有用,老鸟不大会出现这种错误。
运行库方面,libstdc++添加了对TR1的支持,可以想见,GCC可能是会是最早的对c++0x标准支持的compiler了。
还有-mtune=native和-march=native将会根据cpuid自动选architecture了,方便多了,不用记那么多东西了。

OK,不管怎么样,升级是很不错的,如果你是gcc fans and c++ fans的话.
在linux下,自然不用麻烦了,cygwin我不太习惯用,不伦不类的。mingw32才是win下的正选。不过网上已经有人做了,参考一下:
http://www.cublog.cn/u/14337/showart.php?id=196265
我就是照着这个compile的
以下还有几个:
http://forum.doom9.org/showthread.php?t=108215
http://leekindo.googlepages.com/gcc-build
http://hi.baidu.com/myangelsky/blog/item/997609e980dd903fb90e2d27.html

OK,有了以上几个,就一定没有问题了。
不过,如果你像我一样无聊,还喜欢自己乱搞的话,你一定会选自己的目录什么的来编译,如果这样的话,你就要注意了,在configure的时候,一定一定要用相对目录,不然的话……
我就不幸被这个问题折磨了两个多星期,最后在mingw 的wiki上才找到根结,主要是gengtype这个东东。目前这个bug还没有fix,所以,要小心!
还有,在make的时候,要加上-march和-mtune(或-mcpu),这样会让你compiler和快一点。不过如果你不清楚自己的cpu是什么 march的话(应该不会吧^_!)你可以上gcc.gnu.org上去找,或是编译两次,第二次用上面说的-march=native和-mtune= native
 

MinGW的C\C++编程环境安装与升级

前言

  当你搜到这篇文章的时候,假设你已经对C和C++有个了解了,而且已经用命令行编译过自己的第一个程序"Hello,world!",请不要再问我VC和GCC有什么分别,也不要问我命令行怎样使用。在写这篇指导性的文章前,我上GOOGLE和百度逛了一遍,发现关于在WINDOWS下建立GCC的C/C++编程环境的文章根本没有几篇,如何在WINDOWS下升级GCC的更加少得可怜,至少在写这篇文章之前中文的一篇也没有搜到。所以,希望我这篇教程能起到抛砖引玉的效果,有经验的老鸟可以忽略此文了。GCC是GNU的重要组成部分,在标准化方面做得很不错,能做到兼容性和可移植性都很好的说。个人认为是学习和应用标准C/C++的最合适的平台。

  为免走弯路,以下请严格按照我下边所说的步骤去做。


Ⅰ - 下载并安装编译用的WINDOWS下的GCC:MinGW

  首先我们需要安装GCC的WINDOWS版本,通常会是比较旧且稳定的GCC发行版本,有些工具已经释出新版本,我是故意用较旧版本,让大家知道如何通过编译源代码获得最新的GCC发行版本。我的选择是MinGW环境,所以我们要下载以下的二进制包进行安装:

  GNUWin32 project:
  bison:
http://prdownloads.sourceforge.net/gnuwin32/bison-2.1-bin.zip?download
  flex:
http://prdownloads.sourceforge.net/gnuwin32/flex-2.5.4a-1-bin.zip?download
  libiconv:
http://prdownloads.sourceforge.net/gnuwin32/libiconv-1.9.2-1-bin.zip?download
  libintl:
http://prdownloads.sourceforge.net/gnuwin32/libintl-0.14.4-bin.zip?download

  MinGW project:
  win32api:
http://prdownloads.sourceforge.net/mingw/w32api-3.7.tar.gz?download
  mingw-runtime:
http://prdownloads.sourceforge.net/mingw/mingw-runtime-3.10.tar.gz?download
  binutils:
http://prdownloads.sourceforge.net/mingw/binutils-2.17.50-20060824-1.tar.gz?download
  gcc-core:
http://prdownloads.sourceforge.net/mingw/gcc-core-3.4.5-20060117-1.tar.gz?download

  下载完后,在C:\根目录下创建一个"GCC"文件夹C:\GCC\,把上边的所有压缩文件连目录一起解压到GCC目录里边,遇到要覆盖文件夹放心覆盖吧,注意的是libiconv包和libintl包只要把里边子目录BIN中的所有库文件*.DLL解压到"BIN"目录中就可以。

  完成后,把C:\GCC\BIN添加到PATH的环境变量中去,在桌面用右键选我的电脑->属性->高级->环境变量,编辑Path在变量值后添加";C:\GCC\BIN",注意前边要加分号。

  注意:解压后,到C:\GCC\BIN目录中把M4.exe删除,在接下来要安装的MSYS中已经包含一个专用的M4,如果你并不打算升级,就这样使用的话,也可以不删,那么你今天的任务也到此结束,你可以用这个环境在命令行中编写你的C\C++程序了,那么,先来一个"Hello world!"吧,哈哈。

Ⅱ - 安装MSYS

  我们需要建立一个完整功能的MSYS环境,实际上MSYS是一个仿POSIX系统,跟LINUX下的BASH大部分命令用法差不多,再简单点说就是一个跟CMD环境差不多的命令行只是命令有点区别,命令行学习GNU前的必修课,不懂的使用命令行的朋友请自行上GOOGLE搜索相关教程,DOS也好,BASH也好,不要成为只会用IDE的小白,要明白编译器在做什么,最好先学习一下命令行。

  现在你要做的就是从http://www.mingw.org上下载并安装一个打包的安装程序。

  下载地址为:http://prdownloads.sourceforge.net/mingw/MSYS-1.0.10.exe

  特别强调:为了清晰你的思路,我建议你安装的时候什么也不要动,一切按照默认的设置让其安装在C:\根目录的默认目录下。安装到最后的时候会叫你确认一下系统有没有安装MinGW一些设置,不用管他,有[YN]按N就会跳去,否则更新的时候MSYS会让MAKE找错MinGW的默认安装路径而把新编译的程序覆盖到GCC目录中,而不是安装到MSYS的MinGW目录中。

  进入MSYS键入"gcc -v"将会列出现有预装的GCC版本。

Ⅲ - 升级和安装GCC的工具

  安装MSYS后,进入MSYS你会发现一个叫MinGW的文件夹,里边空空如也,不用急,我们获取最新的GCC源码后,编译得到的二进制文件就会安装到这里。

  首先,先把刚才下的两个文件w32api-3.7.tar.gz和mingw-runtime-3.10.tar.gz两个文件连目录解压到里边"c:\msys\1.0\mingw",还有binutils这个工具集,如果你嫌麻烦,可以直接下载一个最新版解压到里边去,如果你想试试自己编译这个工具集,就跟着我走吧。

  到http://ftp.gnu.org/gnu/binutils/下载最新的源代码,目前为binutils-2.17.tar.bz2 。

  在MSYS环境下创建工作目录,命令如下:

# cd /
# mkdir gcc-work && cd gcc-work
# mkdir {build,source}

  把下载好的binutils-2.17.tar.bz2放到SOURCE目录中,解压缩命令如下:

# cd source
# tar jxf binutils-2.17.tar.bz2

  解压后进入build目录进行编译

# cd ../build
# mkdir binutils && cd binutils

  把binutils配置,编译和安装在/mingw下:

# ../../source/binutils-2.17/configure --prefix=/mingw --host=mingw32 --target=mingw32 --program-prefix="" --with-lib-path=/mingw/mingw32/lib:/mingw/lib:/usr/local/lib:/lib:/usr/lib --with-gcc --with-gnu-as --with-gnu-ld --disable-nls --disable-shared
# make  CFLAGS="-O2 -D__USE_CRTIMP -fno-exceptions" LDFLAGS=-s

  现在你可以去做其他事情了,编译要等一段长时间才能完成,你可以去冲咖啡,也可以像我一样,拿起GAMEBOY找WARIO大叔玩去。

  编译完成后,我们只要运行安装命令就好:

# make install

  到MinGW下看看bin目录中是否多了我们刚才编译的程序?

  继续安装GCC,升级编译器,当然我这里只升级和安装C和C++的编译器,如果你需要,可以自己安装其他编译器如JAVA,详细的内容可以参考http://gcc.gnu.org/install/configure.html

  gcc-core: http://ftp.gnu.org/gnu/gcc/gcc-4.1.1/gcc-core-4.1.1.tar.bz2
  gcc-g++: 
http://ftp.gnu.org/gnu/gcc/gcc-4.1.1/gcc-g++-4.1.1.tar.bz2

  像刚才一样把源代码包复制到SOURCE文件夹中解压
# cd /gcc-work/source
# tar jxf gcc-core-4.1.1.tar.bz2
# tar jxf gcc-g++-4.1.1.tar.bz2

  然后到BUILD目录中创建GCC目录

# cd ../build
# mkdir gcc && cd gcc

  配置安装:

# ../../source/gcc-4.1.1/configure --prefix=/mingw --host=mingw32 --target=mingw32 --program-prefix="" --with-as=/mingw/bin/as.exe --with-ld=/mingw/bin/ld.exe --with-gcc --with-gnu-ld --with-gnu-as --enable-threads --disable-nls --enable-languages=c,c++ --disable-win32-registry --disable-shared --without-x --enable-interpreter --enable-hash-synchronization --enable-libstdcxx-debug
# make CFLAGS="-O2 -fomit-frame-pointer" CXXFLAGS="-mthreads -fno-omit-frame-pointer -O2" LDFLAGS=-s bootstrap2
# make install

  在那以后你的新鲜出炉的GCC编译完成并可以使用了,是不是很兴奋,去看看有什么新特性吧,哈哈。

  另外,不要忘了把PATH指向新的GCC的BIN环境哦。

  还有还有,还可以安装一下其他的工具,比如make的最新版等,最后示范一个

  http://ftp.gnu.org/gnu/make/make-3.81.tar.bz2

  复制解压,驾轻就熟了吧,呵呵:

# cd /gcc-work/source
# tar jxf make-3.81.tar.bz2

  然后进入BUILD创建工程目录:

# cd ../build && mkdir make
# cd make

  又开始泡茶了,呵呵:

# ../../source/make-3.81/configure --prefix=/mingw --target=mingw32 --program-prefix="" --disable-nls --disable-dependency-tracking
# make CFLAGS=-O2 LDFLAGS=-s
# make install

  写在最后,可能初学者会对编译时那些长长的尾标感到恐惧,努力吧,其实看完帮助文档后,就会很容易理解那些尾标是作啥用途的,GCC是强大的标准的编译工具集,并不局限于学习,而且是编写一些夸平台程序的最佳选择。

摘自http://www.yuanma.org/data/2007/0217/article_2313.htm

12 octobre

[转]在Windows下编译ffmpeg完全手册

本文的内容几乎全部来自于FFmpeg on Windows,但是由于国内的网络封锁,很难访问这个域名下的内容,因此我一方面按照我自己的理解和实践做了翻译,另一方面也是为了能提供一个方便的参考方法。

注:
  1. 对于compile和build这两个词,本文统一的使用编译这个词,根据上下文读者应能区分语义上的差别。
        本文的目的是提供一切与FFmpeg在Windows下的相关帮助。它最初是一个针对用MSys+MinGW系统编译的手把手的教程,现在也增加了如何在你的项目中链接FFmpeg所产生的库(C++,C#)。   
          我们不讨论Cygwin,因为它的工作方式基本上与Unix系统相一致。 开始之前,首先要明确以下几点:

    1. 由于MSVC++并不严格的遵循C标准,因此FFmpeg不能使用MSVC++来编译,而且将来也不会支持。所以整个编译过程必须使用MSys+MinGW系统来完成。
    2. 如果你选择编译动态链接库(dll),这些库将和其他的动态链接库一样在使用上没什么差别。你可以使用MSVC++来链接这些库进入到你的程序,只有这种情况下MSVC++是被支持的。
          介绍本指南是十分冗长的。如果你已经以前曾有过编译开源软件的经验,你可以尝试读一下这篇。它要简短的多,只需要一些小的微调就能正常工作。
           但是如果你遇到了任何问题 ,在你向ffmpeg的邮件列表报告错误时请先仔细的通读本文,它是非常直观的,不少地方的细节甚至可能过于详细了。我们试图涵盖一切可能出错的地方,如果你精确的遵照文中的方法,你不会在Windows环境下的FFmpeg上有任何问题。 尽你的努力去解决你所遇到的问题,绝大多数的FFmpeg开发人员不使用Windows,所以他们帮不了你什么。

          预备这里的内容可能和本文没有什么关系,但是我不想留下任何可能出错的地方。对于绝大多数人来说,这一部分可以跳过。 你需要一个解压的工具软件支持"*.tar.gz"和"*.tar.bz2"文件。你将需要把这些压缩包解压缩到指定的目录下。如果你已经有这样的程序了,并且知道如何解压到特定目录下,请阅读 准备MSys+MinGW系统。 这里我将演示如何使用7-Zip或WinRAR来解压缩。推荐使用7-Zip,因为它是开源且免费的。
        准备MSys+MinGW系统获取最新的MSys+MinGW系统。注意以下几个包的版本要求:
        • 不要使用2.0.4的bash,这个是有缺陷的,2.05b的bash用来编译FFmpeg没有问题,但是更推荐3.1版本。
        • 使用msys-1.0.dll-SNAP-1.0.11-2006.04.23
        • 不要使用binutils-2.15.91-20040904-1,它无法正确的链接。
              如果你已经安装配置完毕,那么请阅读下一部分用SVN方式获取FFmpeg,否则的话请依次执行下面的步骤。
                用SVN方式获取FFmpeg如果你已经知道如何获取FFmpeg的源代码,那么请阅读下一部分编译。 由于FFmpeg的源代码存放在SVN仓库里,你必须使用命令行程序或是图形界面程序来访问。我个人推荐TortoiseSVN,因为它和Windows资源管理器结合的非常棒,所以我只介绍使用 TortoiseSVN的方法。 编译
              链接
                编译FFplay你必须事先安装了SDL-devel
                1. 解压该软件包。
                2. lib下的所有文件复制到C:\msys\mingw\lib
                3. include下的所有文件复制到C:\msys\mingw\include
                4. bin下的i386-mingw32msvc-sdl-config复制到C:\msys\mingw\bin,并重命名为sdl-config
                5. bin下的SDL.dll复制到C:\msys\mingw\bin


                  SDL.dll必须在ffplay.exe德PATH路径中,程序才能启动。在MSys环境下mingw/bin在PATH环境变量中,因此运行ffplay.exe不会有问题。但如果你想在MSys外部运行,则应SDL.dll复制到和ffplay.exe同一个目录下。

                  现在你可以按照前面的方式静态或动态重新编译FFmpeg,在运行configure脚本后,它将正确的找到SDL和ffplay。

                  对第三方库的支持

                      你必须完全的理解编译动态库部分。

                       在向FFmpeg的二进制文件中添加其他的库时,你必须首先考虑库是以静态还是动态的链接到FFmpeg中。不要把这个和FFmpeg本身是静态/动态链接库搞混,你可以把静态的将第三方库链接到FFmpeg中,但是FFmpeg的库本身是动态加载的dll库。

                      考虑这种情况:你想要更换xvidcore却不希望重新编译FFmpeg,那你就应该把xvidcore编译成动态链接库。

                      其次你要考虑的是这些第三方库被安装到MSys系统中的什么位置上。

                       对于绝大多数的是库,如果你把它们安装到缺省路径,你就得向FFmpeg的configure脚本传递额外的参数,这样才能在编译的时候找到这些库。

                      如果你把这些库安装到gcc的缺省 includelib路径下,就不需要额外指定这些参数了。如果你希望把动态库和静态库分开保存,那就不得不指定路径。这样的路径被称为你所安装的库的prefix。 如果你把库安装在了非gcc的缺省寻找路径,你必须向FFmpeg的configure脚本传递这些路径信息。

                  --extra-ldflags=-L<prefix>/lib --extra-cflags=-I<prefix>/include

                  类似这样:

                  ./configure --enable-memalign-hack --enable-mp3lame  -–extra-ldflags=-L/usr/local/lib  --extra-cflags=-I/usr/local/include

                  在MSys下gcc的缺省路径是 /mingw另外,如果你把这些库的dll安装后,确保你的应用程序能在PATH环境变量中找到相应的dll。 我将展示下面这些库的安装:
                    引用原文:http://www.aurora-x.net/wiki/CompileFFmpegWindows