STLport-4.5.3在Visual C++6.0环境中的编译和配置

来源:互联网 发布:unity3d与arduino交互 编辑:程序博客网 时间:2024/05/22 05:15

 参考:http://jjhou.csdn.net/myan-stlport.htm

1.目录介绍
本文解压缩STLport 在目录D:/STLport-4.5.3/下
STLport-4.5.3文件夹里的内容:
    README      - 自述文件
    INSTALL     - 安装说明

    doc         - STLPort的发行文档
    etc         - 杂七杂八的一些文件
    src         - 源文件和编译工程
    stlport     - STLport头文件夹
    test        - 测试目录
    test/regression   - 回归测试,使用STLPort库
    test/eh           - 使用STLPort进行异常处理测试
    lib         - 编译后将产生此文件夹,这是STLport链接库目录

2.修改VCVARS32.BAT
到C:/Program Files/Microsoft Visual Studio/VC98/Bin/中,利用你顺手的文本编辑器修改文件VCVARS32.BAT
其中有两行
set INCLUDE=%MSVCDir%/ATL/INCLUDE;%MSVCDir%/INCLUDE;%MSVCDir%/MFC/INCLUDE;%INCLUDE%
set LIB=%MSVCDir%/LIB;%MSVCDir%/MFC/LIB;%LIB%
改成:
set INCLUDE=D:/STLport-4.5.3/stlport;%MSVCDir%/ATL/INCLUDE;%MSVCDir%/INCLUDE;/
%MSVCDir%/MFC/INCLUDE;%INCLUDE%
set LIB=D:/STLport-4.5.3/lib;%MSVCDir%/LIB;%MSVCDir%/MFC/LIB;%LIB%
上面为了方面阅读用 "/" 符号将过长的一行折成两行,实际文件中还是一行。
(D:/STLport-4.5.3/lib目前还不存在,但不用着急,编译完stlport就有了)
修改完毕後保存,然後执行命令vcvars32。一切顺利的话应该给出一行结果:
Setting environment for using Microsoft Visual C++ tools.

3.进入命令提示符下设置VC6.0环境变量
运行VCVARS32.BAT设置VC6.0的环境变量,设置完后不要关闭此命令提示符窗口
VCVARS32.BAT所在目录:C:/Program Files/Microsoft Visual Studio/VC98/Bin/VCVARS32.BAT

4.编译stlport
进入"D:/STLport-4.5.3/src"目录(只编译某个版本见install文件说明)
copy vc6.mak makefile
nmake clean all
屏幕反反复复地显示似乎是同样的内容,请务必保持耐心,这实际上是在以不同编译开关建立不同性质的目标库。
经过一段漫长的编译之後, 终於结束了。
现在你再执行命令
nmake install
OK,大功告成。 在Win32平台上,"install"做了下面的工作
1 STLPort所产生的动态库DLL被复制到system32(NT)或者system(98),目录下。
2 stlport子目录被复制到vc编译器的include目录下。
3 .lib文件被复制到vc编译器的lib目录下。

5.然后就可以进行测试了
a.编译stl_test
进入目录"D:/STLport-4.5.3/stlport/test/regression"
nmake -f vc6.mak
编译完运行stl_test.exe
b.编译eh_test
进入目录"D:/STLport-4.5.3/stlport/test/eh"
nmake -f vc6.mak
编译完运行eh_test.exe(时间比较久)

6.测试VC6.0是否使用了STLPort
为了测试各种链接库的使用,nmake install做的三步操作全部撤销。
删除VC编译器include目录下的stlport头文件
删除VC编译器lib目录下的stlport头文件
删除system32下的stlport_vc6_stldebug45.dll和stlport_vc645.dll
测试程序issgistl.cpp。见11.测试程序代码issgistl.cpp
VC6.0下直接编译issgistl.cpp。
会提示:fatal error C1083: Cannot open include file: 'rope': No such file or directory
这是工程没有包含stlsport。按步骤7的方式 include stlport的头文件

7.配置工程包含stlport的头文件
修改工程选项:Project->Settings...->C/C++中,Category选择Preprocessor,
Additional include directories中添加:D:/STLport-4.5.3/stlport
添加好后再次编译,还有错误!
LINK : fatal error LNK1104: cannot open file "stlport_vc6_static.lib"
提示没找到stlport的lib库,奇怪?我们也没强制载入stlport_vc6_static.lib库阿?
install中说到:
   [ Visual C++ specific ] For VC++, you do not have to specify "stlport-msvc-XXX.lib" explicitly,
   as it is being choosen and forced to link automatically by "#pragma"'s in stlport/config/stl_select_lib.h.
原来stlport/config/stl_select_lib.h文件中自动载入了lib库。
但如何控制是Realse版还是Debug版?静态链接库还是动态链接库?
看一下stl_select_lib.h,以下四种方式通过在工程选项:Project->Settings...->C/C++中,Category选择General,
两个宏定义 _STLP_DEBUG 和 _STLP_USE_DECLSPEC 是否添加到 Preprocessor definitions 来控制调用何种链接库
动态链接库的Debug版   stlport_vc6_stldebug.lib  添加 _STLP_DEBUG 和 _STLP_USE_DECLSPEC
动态链接库的Release版 stlport_vc6.lib   添加 _STLP_USE_DECLSPEC
静态链接库的Debug版   stlport_vc6_stldebug_static.lib 添加 _STLP_DEBUG
静态链接库的Release版 stlport_vc6_static.lib  什么也不添加
好了,都清楚了。设置成 动态链接库的Debug版 的模式
把 stlport_vc6_stldebug.lib 拷贝到工程根目录。
或者工程中添加lib路径,修改工程选项:Project->Settings...->Link中,Category选择Input,
Additional library path中添加:D:/STLport-4.5.3/stlport
再编译,没有错误。运行,提示没有找到stlport_vc6_stldebug45.dll。
把stlport_vc6_stldebug45.dll拷贝到工程的Debug目录下。编译,运行。OK,熟悉的"Hello World"出来了。

8.配置VC6.0开发环境的stlport(此项可略过,在每个工程中单独配置)
打开VC6,在Tools->Options...->Directories中
添加include files路径: "D:/STLport-4.5.3/stlport",移到最上一条。
添加library files路径: "D:/STLport-4.5.3/lib",移到最上一条。
把stlport_vc6_stldebug45.dll和stlport_vc645.dll拷贝到system32目录下
这样以后就不用每个工程都做 步骤7的操作了。

9.SGI STL特性与VC6.0缺省设置的不同之处
找一个使用了SGI STL特性的程序,比如使用rope, slist, hash_set, hash_map等容器的程序来编译。
注意,编译时务必使用下面的格式:
cl /GX /MT program.cpp
a./GX:SGI STL中大量使用try..throw..catch,VC缺省情况下不支持此语法,/GX是要求VC++ Compiler打开对异常处理语法的支持。
b./MT:/MT则是要求VC的linker本程序obj文件与libcmt.lib连接在一起,因为SGI STL是thread-safe的,必须以multi-thread形式运行。
c.若要在图形界面中使用SGI STL,可在VC中调整Project-->Setting(Alt+F7), 设置编译选项,
注意使用/MT和/GX。见步骤10
并且引入选项/I "D:/STLport-4.5.3.VC6.0/stlport"及/libpath:"D:/STLport-4.5.3.VC6.0/lib"。见步骤7
详情见10.配置工程的stlport。

10.配置工程的stlport线程方式
修改工程选项:Project->Settings...->C/C++中,Category选择Code Generation。
然后在use run-time library中选择Debug Multithreaded。
(如果是release版本,选择Multithreaded)
(如果想用动态链接,则要先有编译动态链接版本的STLport,再在这儿选择相应的DLL)

11.测试程序代码issgistl.cpp

  1. //issgistl.cpp
  2. #include <iostream>
  3. #include <rope>
  4. using namespace std;
  5. int main()
  6. {
  7.     // crope就是容纳char类型字符的rope容器
  8.     crope bigstr1("Hello");
  9.     crope bigstr2("World");
  10.     crope story = bigstr1 + " " + bigstr2;
  11.     cout << story << endl;
  12.  system("pause");
  13.  return 0;
  14. }


 

原创粉丝点击