我正在尝试使用VS2015为目前基于VS2013的项目构建依赖项
他们中的大多数都没有问题,无论是现状还是补丁,但我对OpenImageIO 1.4.12完全不知所措。
我将参数传递给cmake和msbuild,它们为所有内容设置了VS2015的使用,实际上生成的解决方案文件将“vc140_xp”指示为所选的工具集。
但是在链接时我收到类似这样的错误,表明某处有一个引用VS2013构建的库:
LINK : fatal error LNK1104: cannot open file 'libboost_thread-vc120-mt-1_56.lib' [F:\...\deps\x64\oiio-Release-1.4.12\build\src\libOpenImageIO\OpenImageIO.vcxproj]
当然我在另一个地方有一堆 libboost_xxx-vc140-mt-1_56.lib ,因为我也用VS2015构建了它们。解决方案文件中设置的依赖项也正确引用 libboost_xxx-vc140-mt-1_56.lib 文件和正确的路径,并且在所有OpenImageIO构建树中执行FINDSTR我无法找到任何对旧版VS版本的引用 但是同一个命令列出了很多包含这些引用的 .obj 文件,例如(为了更好的可读性而放在多行上):
build\src\libOpenImageIO\OpenImageIO.dir\Release\xmp.obj:/FAILIFMISMATCH:"_CRT_STDIO_ISO_WIDE_SPECIFIERS=0"
libboost_regex-vc120-mt-1_56.lib
libboost_thread-vc120-mt-1_56.lib
libboost_date_time-vc120-mt-1_56.lib
libboost_system-vc120-mt-1_56.lib
libboost_chrono-vc120-mt-1_56.lib
是否因为这些引用链接无法寻找不同版本的boost库?这些参考文献来自哪里?我怎么能摆脱它们,因为显然它们在我的配置中找不到它?
答案 0 :(得分:1)
这个问题本身就在boost中,而不是在OpenImageIO中,并且是由在VS2015之前发布的使用版本的boost引起的。
正如肯巴在评论中所指出的,这个答案指向了解决方案:
Visual Studio 2013 (vs120) asks for wrong boost libraries。
可以在此处找到与旧版boost和VS相关的完整说明:
How do I specify, which version of boost library to link to?。
对于VS2015,以下是 boost / config / auto_link.hpp 中相应代码行的显示方式:
# elif defined(BOOST_MSVC) && (BOOST_MSVC < 1800)
// vc11:
# define BOOST_LIB_TOOLSET "vc110"
# elif defined(BOOST_MSVC) && (BOOST_MSVC < 1900)
// vc12:
# define BOOST_LIB_TOOLSET "vc120"
# elif defined(BOOST_MSVC)
// vc14:
# define BOOST_LIB_TOOLSET "vc140"
实施这些线条解决了我的问题。