boost编译一次可以在VS2012和VS2015上共用不?

时间:2022-09-09 00:20:41
我在VS2012上编译出静态的boost库,然后可以链接使用;然后我换成VS2015编译同样的工程链接的时候报错
boost编译一次可以在VS2012和VS2015上共用不?
而我编译出来的静态库文件名为:libboost_regex-vc110-mt-gd-1_60.lib。就是一个编译器版本不一样,难道这样子不能通用么?还是boost库要怎么设置?如果换个开发工具就得重编一个版本的lib就太麻烦了。

17 个解决方案

#1


不能共用,必须重新编译。
就算是vs2015和vs2015 update1也不通用。

#2


引用 楼主 shenyamu 的回复:
我在VS2012上编译出静态的boost库,然后可以链接使用;然后我换成VS2015编译同样的工程链接的时候报错
boost编译一次可以在VS2012和VS2015上共用不?
而我编译出来的静态库文件名为:libboost_regex-vc110-mt-gd-1_60.lib。就是一个编译器版本不一样,难道这样子不能通用么?还是boost库要怎么设置?如果换个开发工具就得重编一个版本的lib就太麻烦了。


regex标准库已经自带为啥还要用boost的?

#3


引用 2 楼 akirya 的回复:
Quote: 引用 楼主 shenyamu 的回复:

我在VS2012上编译出静态的boost库,然后可以链接使用;然后我换成VS2015编译同样的工程链接的时候报错
boost编译一次可以在VS2012和VS2015上共用不?
而我编译出来的静态库文件名为:libboost_regex-vc110-mt-gd-1_60.lib。就是一个编译器版本不一样,难道这样子不能通用么?还是boost库要怎么设置?如果换个开发工具就得重编一个版本的lib就太麻烦了。


regex标准库已经自带为啥还要用boost的?

显得更高大上嘛。 boost编译一次可以在VS2012和VS2015上共用不?

#4


引用 2 楼 akirya 的回复:
Quote: 引用 楼主 shenyamu 的回复:

我在VS2012上编译出静态的boost库,然后可以链接使用;然后我换成VS2015编译同样的工程链接的时候报错
boost编译一次可以在VS2012和VS2015上共用不?
而我编译出来的静态库文件名为:libboost_regex-vc110-mt-gd-1_60.lib。就是一个编译器版本不一样,难道这样子不能通用么?还是boost库要怎么设置?如果换个开发工具就得重编一个版本的lib就太麻烦了。


regex标准库已经自带为啥还要用boost的?
C++98标准库里包含regex?

#5


新标准库有没有我不清楚,但老标准库肯定没有。低版本的VC中,regex库似乎是微软自己搞的,用起来和boost中的很不一样。

引用 2 楼 akirya 的回复:
Quote: 引用 楼主 shenyamu 的回复:

我在VS2012上编译出静态的boost库,然后可以链接使用;然后我换成VS2015编译同样的工程链接的时候报错
boost编译一次可以在VS2012和VS2015上共用不?
而我编译出来的静态库文件名为:libboost_regex-vc110-mt-gd-1_60.lib。就是一个编译器版本不一样,难道这样子不能通用么?还是boost库要怎么设置?如果换个开发工具就得重编一个版本的lib就太麻烦了。


regex标准库已经自带为啥还要用boost的?

#6


引用 4 楼 shenyamu 的回复:
Quote: 引用 2 楼 akirya 的回复:

Quote: 引用 楼主 shenyamu 的回复:

我在VS2012上编译出静态的boost库,然后可以链接使用;然后我换成VS2015编译同样的工程链接的时候报错
boost编译一次可以在VS2012和VS2015上共用不?
而我编译出来的静态库文件名为:libboost_regex-vc110-mt-gd-1_60.lib。就是一个编译器版本不一样,难道这样子不能通用么?还是boost库要怎么设置?如果换个开发工具就得重编一个版本的lib就太麻烦了。


regex标准库已经自带为啥还要用boost的?
C++98标准库里包含regex?

c++11 有。

#7


引用 4 楼 shenyamu 的回复:
Quote: 引用 2 楼 akirya 的回复:

Quote: 引用 楼主 shenyamu 的回复:

我在VS2012上编译出静态的boost库,然后可以链接使用;然后我换成VS2015编译同样的工程链接的时候报错
boost编译一次可以在VS2012和VS2015上共用不?
而我编译出来的静态库文件名为:libboost_regex-vc110-mt-gd-1_60.lib。就是一个编译器版本不一样,难道这样子不能通用么?还是boost库要怎么设置?如果换个开发工具就得重编一个版本的lib就太麻烦了。


regex标准库已经自带为啥还要用boost的?
C++98标准库里包含regex?

C++11中增加
早在VS2008 SP1 中已经自带了。

#8


引用 5 楼 super_admi 的回复:
新标准库有没有我不清楚,但老标准库肯定没有。低版本的VC中,regex库似乎是微软自己搞的,用起来和boost中的很不一样。

不管谁搞得,但标准中有了,自然要朝符合标准的走。
至于boost,和标准不一样很正常。

#9


lib无法通用,dll还可以。
即使有C++11,编译boost asio还是要用到boost regex

#10


就算是同一个VC版本,debug和release的,ansi和unicode的静态库都不能通用。要通用的话去做动态库去,只要用纯C做DLL接口,在别的语言里都可以用,更别谈不同VC版本了。

#11


引用 10 楼 jiangsheng 的回复:
就算是同一个VC版本,debug和release的,ansi和unicode的静态库都不能通用。要通用的话去做动态库去,只要用纯C做DLL接口,在别的语言里都可以用,更别谈不同VC版本了。
嗯,明白了!我在VS2012上试下编出boost的DLL和lib然后在VS2015工程里引用这个DLL相关的,编译链接正常通过,但是运行出现异常!同样的工程放到VS2012编译运行结果是正常的。这又有何差异了?

#12


引用 11 楼 shenyamu 的回复:
Quote: 引用 10 楼 jiangsheng 的回复:

就算是同一个VC版本,debug和release的,ansi和unicode的静态库都不能通用。要通用的话去做动态库去,只要用纯C做DLL接口,在别的语言里都可以用,更别谈不同VC版本了。
嗯,明白了!我在VS2012上试下编出boost的DLL和lib然后在VS2015工程里引用这个DLL相关的,编译链接正常通过,但是运行出现异常!同样的工程放到VS2012编译运行结果是正常的。这又有何差异了?

dll接口是纯C的可以随便用
但boost的dll不是纯C的接口无法通用。

#13


你可以在vs2015里面选择v120的工具平台
也就是说要用vs2012的编译器才行

#14


引用 12 楼 akirya 的回复:
Quote: 引用 11 楼 shenyamu 的回复:

Quote: 引用 10 楼 jiangsheng 的回复:

就算是同一个VC版本,debug和release的,ansi和unicode的静态库都不能通用。要通用的话去做动态库去,只要用纯C做DLL接口,在别的语言里都可以用,更别谈不同VC版本了。
嗯,明白了!我在VS2012上试下编出boost的DLL和lib然后在VS2015工程里引用这个DLL相关的,编译链接正常通过,但是运行出现异常!同样的工程放到VS2012编译运行结果是正常的。这又有何差异了?

dll接口是纯C的可以随便用
但boost的dll不是纯C的接口无法通用。
好像不对啊,我这边有个用VS20005编译出的codejock的XTP界面库的DLL和Lib,这个界面库是用C++写的,在VS2012引用这两个DLL和Lib完全没有问题出现啊。

#15


bjam toolset=msvc-11.0 variant=debug,release threading=multi link=static,,,注意这里的msvc=11.0表示与vs2012版本对应

#16


引用 14 楼 shenyamu 的回复:
Quote: 引用 12 楼 akirya 的回复:

Quote: 引用 11 楼 shenyamu 的回复:

Quote: 引用 10 楼 jiangsheng 的回复:

就算是同一个VC版本,debug和release的,ansi和unicode的静态库都不能通用。要通用的话去做动态库去,只要用纯C做DLL接口,在别的语言里都可以用,更别谈不同VC版本了。
嗯,明白了!我在VS2012上试下编出boost的DLL和lib然后在VS2015工程里引用这个DLL相关的,编译链接正常通过,但是运行出现异常!同样的工程放到VS2012编译运行结果是正常的。这又有何差异了?

dll接口是纯C的可以随便用
但boost的dll不是纯C的接口无法通用。
好像不对啊,我这边有个用VS20005编译出的codejock的XTP界面库的DLL和Lib,这个界面库是用C++写的,在VS2012引用这两个DLL和Lib完全没有问题出现啊。

表示怀疑,很常用的CString的实现都改了。。

#17


不通用。但是Boost中大部分库都不需要编译,你把Boost下载下来解压到一个目录里,VS2012和VS2015的项目中include一下它就行了,等需要用到必须编译的库时再编译

#1


不能共用,必须重新编译。
就算是vs2015和vs2015 update1也不通用。

#2


引用 楼主 shenyamu 的回复:
我在VS2012上编译出静态的boost库,然后可以链接使用;然后我换成VS2015编译同样的工程链接的时候报错
boost编译一次可以在VS2012和VS2015上共用不?
而我编译出来的静态库文件名为:libboost_regex-vc110-mt-gd-1_60.lib。就是一个编译器版本不一样,难道这样子不能通用么?还是boost库要怎么设置?如果换个开发工具就得重编一个版本的lib就太麻烦了。


regex标准库已经自带为啥还要用boost的?

#3


引用 2 楼 akirya 的回复:
Quote: 引用 楼主 shenyamu 的回复:

我在VS2012上编译出静态的boost库,然后可以链接使用;然后我换成VS2015编译同样的工程链接的时候报错
boost编译一次可以在VS2012和VS2015上共用不?
而我编译出来的静态库文件名为:libboost_regex-vc110-mt-gd-1_60.lib。就是一个编译器版本不一样,难道这样子不能通用么?还是boost库要怎么设置?如果换个开发工具就得重编一个版本的lib就太麻烦了。


regex标准库已经自带为啥还要用boost的?

显得更高大上嘛。 boost编译一次可以在VS2012和VS2015上共用不?

#4


引用 2 楼 akirya 的回复:
Quote: 引用 楼主 shenyamu 的回复:

我在VS2012上编译出静态的boost库,然后可以链接使用;然后我换成VS2015编译同样的工程链接的时候报错
boost编译一次可以在VS2012和VS2015上共用不?
而我编译出来的静态库文件名为:libboost_regex-vc110-mt-gd-1_60.lib。就是一个编译器版本不一样,难道这样子不能通用么?还是boost库要怎么设置?如果换个开发工具就得重编一个版本的lib就太麻烦了。


regex标准库已经自带为啥还要用boost的?
C++98标准库里包含regex?

#5


新标准库有没有我不清楚,但老标准库肯定没有。低版本的VC中,regex库似乎是微软自己搞的,用起来和boost中的很不一样。

引用 2 楼 akirya 的回复:
Quote: 引用 楼主 shenyamu 的回复:

我在VS2012上编译出静态的boost库,然后可以链接使用;然后我换成VS2015编译同样的工程链接的时候报错
boost编译一次可以在VS2012和VS2015上共用不?
而我编译出来的静态库文件名为:libboost_regex-vc110-mt-gd-1_60.lib。就是一个编译器版本不一样,难道这样子不能通用么?还是boost库要怎么设置?如果换个开发工具就得重编一个版本的lib就太麻烦了。


regex标准库已经自带为啥还要用boost的?

#6


引用 4 楼 shenyamu 的回复:
Quote: 引用 2 楼 akirya 的回复:

Quote: 引用 楼主 shenyamu 的回复:

我在VS2012上编译出静态的boost库,然后可以链接使用;然后我换成VS2015编译同样的工程链接的时候报错
boost编译一次可以在VS2012和VS2015上共用不?
而我编译出来的静态库文件名为:libboost_regex-vc110-mt-gd-1_60.lib。就是一个编译器版本不一样,难道这样子不能通用么?还是boost库要怎么设置?如果换个开发工具就得重编一个版本的lib就太麻烦了。


regex标准库已经自带为啥还要用boost的?
C++98标准库里包含regex?

c++11 有。

#7


引用 4 楼 shenyamu 的回复:
Quote: 引用 2 楼 akirya 的回复:

Quote: 引用 楼主 shenyamu 的回复:

我在VS2012上编译出静态的boost库,然后可以链接使用;然后我换成VS2015编译同样的工程链接的时候报错
boost编译一次可以在VS2012和VS2015上共用不?
而我编译出来的静态库文件名为:libboost_regex-vc110-mt-gd-1_60.lib。就是一个编译器版本不一样,难道这样子不能通用么?还是boost库要怎么设置?如果换个开发工具就得重编一个版本的lib就太麻烦了。


regex标准库已经自带为啥还要用boost的?
C++98标准库里包含regex?

C++11中增加
早在VS2008 SP1 中已经自带了。

#8


引用 5 楼 super_admi 的回复:
新标准库有没有我不清楚,但老标准库肯定没有。低版本的VC中,regex库似乎是微软自己搞的,用起来和boost中的很不一样。

不管谁搞得,但标准中有了,自然要朝符合标准的走。
至于boost,和标准不一样很正常。

#9


lib无法通用,dll还可以。
即使有C++11,编译boost asio还是要用到boost regex

#10


就算是同一个VC版本,debug和release的,ansi和unicode的静态库都不能通用。要通用的话去做动态库去,只要用纯C做DLL接口,在别的语言里都可以用,更别谈不同VC版本了。

#11


引用 10 楼 jiangsheng 的回复:
就算是同一个VC版本,debug和release的,ansi和unicode的静态库都不能通用。要通用的话去做动态库去,只要用纯C做DLL接口,在别的语言里都可以用,更别谈不同VC版本了。
嗯,明白了!我在VS2012上试下编出boost的DLL和lib然后在VS2015工程里引用这个DLL相关的,编译链接正常通过,但是运行出现异常!同样的工程放到VS2012编译运行结果是正常的。这又有何差异了?

#12


引用 11 楼 shenyamu 的回复:
Quote: 引用 10 楼 jiangsheng 的回复:

就算是同一个VC版本,debug和release的,ansi和unicode的静态库都不能通用。要通用的话去做动态库去,只要用纯C做DLL接口,在别的语言里都可以用,更别谈不同VC版本了。
嗯,明白了!我在VS2012上试下编出boost的DLL和lib然后在VS2015工程里引用这个DLL相关的,编译链接正常通过,但是运行出现异常!同样的工程放到VS2012编译运行结果是正常的。这又有何差异了?

dll接口是纯C的可以随便用
但boost的dll不是纯C的接口无法通用。

#13


你可以在vs2015里面选择v120的工具平台
也就是说要用vs2012的编译器才行

#14


引用 12 楼 akirya 的回复:
Quote: 引用 11 楼 shenyamu 的回复:

Quote: 引用 10 楼 jiangsheng 的回复:

就算是同一个VC版本,debug和release的,ansi和unicode的静态库都不能通用。要通用的话去做动态库去,只要用纯C做DLL接口,在别的语言里都可以用,更别谈不同VC版本了。
嗯,明白了!我在VS2012上试下编出boost的DLL和lib然后在VS2015工程里引用这个DLL相关的,编译链接正常通过,但是运行出现异常!同样的工程放到VS2012编译运行结果是正常的。这又有何差异了?

dll接口是纯C的可以随便用
但boost的dll不是纯C的接口无法通用。
好像不对啊,我这边有个用VS20005编译出的codejock的XTP界面库的DLL和Lib,这个界面库是用C++写的,在VS2012引用这两个DLL和Lib完全没有问题出现啊。

#15


bjam toolset=msvc-11.0 variant=debug,release threading=multi link=static,,,注意这里的msvc=11.0表示与vs2012版本对应

#16


引用 14 楼 shenyamu 的回复:
Quote: 引用 12 楼 akirya 的回复:

Quote: 引用 11 楼 shenyamu 的回复:

Quote: 引用 10 楼 jiangsheng 的回复:

就算是同一个VC版本,debug和release的,ansi和unicode的静态库都不能通用。要通用的话去做动态库去,只要用纯C做DLL接口,在别的语言里都可以用,更别谈不同VC版本了。
嗯,明白了!我在VS2012上试下编出boost的DLL和lib然后在VS2015工程里引用这个DLL相关的,编译链接正常通过,但是运行出现异常!同样的工程放到VS2012编译运行结果是正常的。这又有何差异了?

dll接口是纯C的可以随便用
但boost的dll不是纯C的接口无法通用。
好像不对啊,我这边有个用VS20005编译出的codejock的XTP界面库的DLL和Lib,这个界面库是用C++写的,在VS2012引用这两个DLL和Lib完全没有问题出现啊。

表示怀疑,很常用的CString的实现都改了。。

#17


不通用。但是Boost中大部分库都不需要编译,你把Boost下载下来解压到一个目录里,VS2012和VS2015的项目中include一下它就行了,等需要用到必须编译的库时再编译