由 Apex 发表于 2005-07-17
最近因工作需要,要将一个几年前写的系统外壳扩展程序的功能作一些增强,于是顺便使用重构的技术,对以前的代码作了一些调整,并且使用STL(这里使用STLport实现)来管理其中的一些数据结构,用上了map,list之类的东东。结果问题出现了。
编译后,这个扩展动态库死活加载不了。后来使用dependency一看,怪了,居然需要依赖stlport_vc646.dll才能够运行。可是我都是使用静态链接的呀,而且如果是建立一个新的工程,同样使用STLport,却没有这样的依赖关系。
百思不得其解!
后来详细阅读STLport的文档,才发现,如果想要使用静态方式链接STLport的lib文件,使发行的动态库或者可执行文件不依赖STLport的动态库,需要在工程文件中设置_STLP_USE_STATIC_LIB的预定义。加上这个预定义后,问题解决。
但是到现在还是没有明白,为什么新创建的工程就不用设置也可以正常工作?理论上链接哪个lib文件,都是由STLport的配置文件在编译时就自动确定了的,不用再人为的设置。如果你知道为什么,请以告我,谢谢!
====================================================
还是自己搞明白了,原来的工程使用动态连接MFC的动态库,在选项中设置使用静态连接MFC的动态库,就不用设置_STLP_USE_STATIC_LIB定义了。估计是STLPort开发者为了简化使用者的设置,自动检测了连接MFC动态库的设置。
一定要心细啊!
![Apex[有所思,有所志]](http://apex.ncksoft.com/wp-content/themes/deepwater/images/dw_site_logo.png)