【问题标题】:Switched from Visual Studio 2008 to Visual Studio 2010 and unable to link to boost filesystem now从 Visual Studio 2008 切换到 Visual Studio 2010,现在无法链接到 boost 文件系统
【发布时间】:2011-09-30 00:38:45
【问题描述】:

我刚从 Visual Studio 2008 切换到 Visual Studio 2010,我的一个项目现在出现链接器错误:

LINK:致命错误 LNK1104:无法打开文件“libboost_filesystem-vc90-mt-gd-1_46_1.lib”

我确实重建了 boost,我在 lib 文件夹中看到了 vc10 库,但我无法弄清楚它为什么/如何仍然引用 vc90 库?我检查了链接器属性,并且指向了正确的文件夹(即 vc10 库的文件夹)。在输入部分我没有指定库,所以我不知道它是如何获得对 vc90 库的引用的。

有人知道这个问题的解决方法是什么吗?

更新

我用来构建boost的构建命令是:

bjam --build-dir=c:\boost --build-type=complete --with-filesystem --toolset=msvc address-model=64 阶段

它自动产生以下输出(除其他外):

stage\lib\boost_filesystem-vc100-mt-1_46_1.lib

命令行

链接器:

/OUT:"bin\x64\Debug\NEST2.dll" /INCREMENTAL /NOLOGO /LIBPATH:"C:\Users\USER\Desktop\sandbox\boost_1_46_1\bin\x64\lib" /LIBPATH:"C: \Users\USER\Desktop\sandbox\db-5.1.25\build_windows\x64\Release" /DLL "ws2_32.lib" "advapi32.lib" "libdb51.lib" "kernel32.lib" "user32.lib" "gdi32 .lib" "winspool.lib" "comdlg32.lib" "shell32.lib" "ole32.lib" "oleaut32.lib" "uuid.lib" "odbc32.lib" "odbccp32.lib" /MANIFEST /ManifestFile:"tmp \x64\Debug\NEST2.dll.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\dev\app\NEST2\bin\x64\Debug \NEST2.pdb" /ASSEMBLYDEBUG /SUBSYSTEM:WINDOWS /PGD:"C:\dev\app\NEST2\bin\x64\Debug\NEST2.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X64 /ERRORREPORT:QUEUE

编译器:

/I"C:\Users\USER\Desktop\sandbox\boost_1_46_1" /I"C:\Users\USER\Desktop\sandbox\db-5.1.25\build_windows" /Zi /nologo /W3 /WX- /Od /Ot /D“WIN32”/D“_WIN64”/D“_DEBUG”/D“_WINDOWS”/D“_USRDLL”/D“NEST2_EXPORTS”/D“_HAS_ITERATOR_DEBUGGING=0”/D“__SECURE _SCL=0”/ D "_WINDLL" /D "_UNICODE" /D "UNICODE" /Gm- /EHsc /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fp"tmp\x64\Debug\NEST2.pch" /Fa "tmp\x64\Debug\" /Fo"tmp\x64\Debug\" /Fd"tmp\x64\Debug\vc100.pdb" /Gd /errorReport:queue

更新 2.0

1>------ Build started: Project: NEST2, Configuration: Debug x64 ------
1>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.Targets(1200,9): warning : The referenced project '{FD045D60-ABAD-4A6C-9794-9BFB085FC3E7}' does not exist.
1>  
1>  Starting pass 1
1>  Processed /DEFAULTLIB:msvcprtd
1>  Processed /DEFAULTLIB:MSVCRTD
1>  Processed /DEFAULTLIB:OLDNAMES
1>  Processed /DEFAULTLIB:libboost_filesystem-vc90-mt-gd-1_46_1.lib // <--- Here it is
1>  Processed /DEFAULTLIB:libboost_system-vc90-mt-gd-1_46_1.lib // <--- and here!
1>  Processed /DEFAULTLIB:uuid.lib

现在,如果我能弄清楚为什么它引用了错误的库!

【问题讨论】:

  • 您使用的是预编译的头文件吗?如果是这样,您的预编译头文件中是否有 boost 头文件?尝试删除所有中间文件并重建。
  • @Preatorian,嗯...我没有使用预编译的头文件。
  • 当你重建 Boost 时,你确定你是用 VC10 重建它吗?
  • @Nicol Bolas,我很确定:我现在正在查看 stagin/lib 文件夹,所有库都标记为 vc100。顺便说一句,这是我的构建输出(注意它正在加载 vc100 库):pastie.org/2174714
  • @Lirik:尝试为项目全局定义预处理器符号BOOST_LIB_DIAGNOSTIC。它发出链接器消息,其中包含链接到的库的名称。也许这会帮助您找出问题的原因。

标签: c++ visual-studio-2010 boost linker-errors boost-filesystem


【解决方案1】:

检查您的 C++ 链接器命令行并确保它没有引用 vc90 库。如果是,您可能已手动将 lib 依赖项添加到“附加库”部分。

如果您仍然无法修复它,请在此处粘贴编译和链接命令行。

【讨论】:

  • fileoffset,将在我回到工作 PC 后立即执行。谢谢
  • 我已经用命令行参数更新了我的问题...没有引用 VC90。我将尝试将 Visual Studio 更新到 SP1,并在打开 msvc-10.0 标志的情况下重建 boost。
  • fileoffset,在我安装 SP1 之后,boost 链接问题就消失了。不知道那里有什么交易。在旁注中:@fileoffset 似乎是 StackOverflow 中的一些特殊内容,当我在评论部分输入它时,它会自动删除(除非我用单引号括起来。
【解决方案2】:

在我更新到 Visual Studio 2010 Service Pack 1 后,链接器问题就消失了。使用 msvc 标志或 msvc-10.0 标志构建 boost 会产生相同的输出,因此对问题没有影响。

此外,我不得不删除 _ITERATOR_DEBUG_LEVEL 宏,因为它在链接时导致不匹配(链接器错误 LNK2038)。

我不确定为什么在安装 SP1 之前它不能正确链接,所以如果有人有想法,请发布它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2014-11-24
    相关资源
    最近更新 更多