代码之家  ›  专栏  ›  技术社区  ›  xyzzyrz

警告链接WDK构建中的boost lib(“LNK4217:本地定义符号uuu导入函数中”)

  •  2
  • xyzzyrz  · 技术社区  · 17 年前

    我正在使用WDK构建下面的示例boost consuming user mode应用程序,但是在链接我先前使用bootstrap和.\bjam从同一终端窗口构建的boost库时,我遇到了以下错误。

    IIUC, MSDN

    另见:a loosely related question .

    C:\exp>more exp.cpp
    #pragma warning(disable: 4512)
    #include <boost/program_options.hpp>
    int __cdecl main() {
      boost::program_options::options_description desc("Allowed options");
      return 0;
    }
    
    C:\exp>more sources
    TARGETNAME=exp
    TARGETTYPE=PROGRAM
    
    USE_MSVCRT=1
    USE_STL=1
    USE_NATIVE_EH=1
    
    MSC_WARNING_LEVEL=/W4 /WX
    
    _NT_TARGET_VERSION= $(_NT_TARGET_VERSION_WINXP)
    
    INCLUDES=..\boost_1_40_0
    
    SOURCES=exp.cpp
    
    UMTYPE=console
    UMBASE=0x400000
    
    TARGETLIBS = $(SDK_LIB_PATH)\ws2_32.lib ..\boost_1_40_0\stage\lib\libboost_program_options-vc100-mt.lib
    
    C:\exp>build
    BUILD: Compile and Link for x86
    BUILD: Loading c:\winddk\7600.16385.0\build.dat...
    BUILD: Computing Include file dependencies:
    BUILD: Start time: Wed Oct 14 17:34:23 2009
    BUILD: Examining c:\exp directory for files to compile.
       c:\exp
    Invalidating OACR warning log for 'root:x86chk'
    BUILD: Saving c:\winddk\7600.16385.0\build.dat...
    BUILD: Compiling and Linking c:\exp directory
    Configuring OACR for 'root:x86chk' - <OACR on>
    _NT_TARGET_VERSION SET TO WINXP
    Linking Executable - objchk_win7_x86\i386\exp.exe
    1>errors in directory c:\exp
    1>link : error LNK1218: warning treated as error; no output file generated
    BUILD: Finish time: Wed Oct 14 17:34:44 2009
    BUILD: Done
    
       1 executable built - 1 Warning - 1 Error
    
    C:\exp>more *wrn
    1>warnings in directory c:\exp
    1>c:\exp\libboost_program_options-vc100-mt.lib(options_description.obj): warning LNK4217: locally defined symbol ??1?$basic_streambuf@DU?$char_traits@D@std@@@std@@UAE@XZ (public: virtual __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::~basic_streambuf<char,struct std::char_traits<char> >(void)) imported in function "public: virtual __thiscall std::basic_stringbuf<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_stringbuf<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@UAE@XZ)
    
    1 回复  |  直到 9 年前
        1
  •  1
  •   janm    17 年前

    您应该让boost auto_link配置做正确的#pragma comment(lib,…)配置,确保引入正确的库并正确设置链接器搜索路径。最可能的情况是,boost库和您的代码针对不同的运行库进行链接。