babysloth cber进来看:上午的问题已经解决,我发现一个编译boost需要特别注意的地方。

SnowFalcon 2002-06-01 06:26:05
我这几天由于项目的需要,要用到boost::regex库。我下载了1.28.0版的下来进行编译。
我用nmake /fvc6.mak 顺利编译完vc6的regex库,前几天又装了stlport4.5.3想顺便
也把vc6-stlport.mak也编译一下。结果也顺利完成。然后我用boost网站上的例子跑了一下发现。vc6-stlport.mak的所有库都能正确运行,但是vc6的库编译器都报:

testre.obj : error LNK2001: unresolved external symbol "public: static void __cdecl boost::w32_regex_traits<char>::transform_primary(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,class std::basic_string<ch
ar,struct std::char_traits<char>,class std::allocator<char> > const &)" (?transform_primary@?$w32_regex_traits@D@boost@@SAXAAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV34@@Z)
这样的错。
这个问题折腾了我整整一天,到csdn上来问babysloth cber,他们也说不知道。
我甚至想是否代码有问题。后来偶然我编译了一下boost::regex的test里面的vc6.mak
发现编译通过但是,在link的时候竟然要boost_regex_vc6-stlport_mds.lib库才能编译
通过。也就是说test的vc6.mak用的不是vc自代的stl库编译的regex,而是stlport的编译库。我突然想到,是不是可能是编译环境被污染了。因为前几天装stlport的时候我在
vc6的Vcvars32.bat文件中的INCLUDE变量和LIB都加了stlport的路径。而且每次编译regex的时候都要先执行Vcvars32.bat,那么就有可能在编译vc6的时候,编译器使用的stl库就不是vc6自代的,而是stlport的。这样编译环境就被污染了。结果从新把regex的库用干净的编译环境编译一下,所有的vc6库都能正常使用了。因此在编译库的时候千万
要是干净的编译环境,否则像stl这种标准库,每个厂商的接口都一致编译的时候不会报错
但是如果真的调用他们的时候,就会因为不同的内部实现而报错。现在我把Vcvars32.bat分成两个文件一个存放干净的vc编译环境,一个存放stlport的编译环境。
另外我发现用jam编译的regex库不管vc+自带stl还是vc+stlport都不能使用。我还没有找到原因不过我已经给boost::regex的作者 John_Maddock@compuserve.com 发了一封
mail希望能够会有答案。
...全文
84 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
babysloth 2002-06-01
  • 打赏
  • 举报
回复
我一直就不喜欢stlport,也没用过。
jam这东西在boost里也引起过若干次争议了:-(
cber 2002-06-01
  • 打赏
  • 举报
回复
嘿嘿,最近两天出去旅游了一趟,不在家,因此不知道恶魔兄居然有问题问我
不过我计算机上面一个编译器都没有,你的那个问题应该也无法解决:)
陈硕 2002-06-01
  • 打赏
  • 举报
回复
gz...

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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