在MSVC10中静态链接boost +我自己的.lib的问题

时间:2013-02-21 11:26:57

标签: c++ boost dll linker

我有一个静态链接到我写的库的MFC应用程序,我也在两个项目中都使用了boost(1.51)。

使用动态链接的运行时和提升库(我的库是静态链接的),一切似乎都运行良好。

但是我很想制作一个静态链接的版本,所以我可以轻松地将.exe分发给一些同事。我知道我可能只是恢复动态链接并使用MSI等,但我想了解我的问题是怎么回事......

所以我最终编译了它,但不是没有像这样的LN4049警告:

MyLib.lib(MyModule.obj) : warning LNK4049: locally defined symbol _printf imported

MSDN文档表明这是由于dll导出/导入声明,但至少在我的代码中没有这些,我看不出它们会来自哪里。

在我成功编译之前,我遇到了很多与DLL导入库有关的链接器错误(符号冲突/重新声明):

1>boost_system-vc100-mt-gd-1_51.lib(boost_system-vc100-mt-gd-1_51.dll) : error LNK2005: "class boost::system::error_category const & __cdecl boost::system::system_category(void)" (?system_category@system@boost@@YAABVerror_category@12@XZ) already defined in libboost_system-vc100-mt-sgd-1_51.lib(error_code.obj) 
1>boost_system-vc100-mt-gd-1_51.lib(boost_system-vc100-mt-gd-1_51.dll) : error LNK2005: "class boost::system::error_category const & __cdecl boost::system::generic_category(void)" (?generic_category@system@boost@@YAABVerror_category@12@XZ) already defined in libboost_system-vc100-mt-sgd-1_51.lib(error_code.obj)

等。我不得不忽略这些DLL导入库:

MSVCRTD.lib, msvcprtd.lib, & boost_system-vc100-mt-gd-1_51.lib

我理解这些是DLL链接的导入库。所述BOOST_LIB_DIAGNOSTIC输出愉快地报告所有的静态升压库我链接到的,并且它包括boostlib_system-VC100-MT-GD-1_51.lib(该库的构建和可执行两者):

1>  MyModule.cpp
1>  Linking to lib file: libboost_thread-vc100-mt-sgd-1_51.lib
1>  Linking to lib file: libboost_date_time-vc100-mt-sgd-1_51.lib
1>  Linking to lib file: libboost_system-vc100-mt-sgd-1_51.lib
1>  Linking to lib file: libboost_chrono-vc100-mt-sgd-1_51.lib

我无法在项目配置中看到我要求DLL链接的地方。

我已经检查了运行时库选项(多线程调试,静态链接)。我在静态库中使用MFC,并且所有的boost库都可用(我没有在任何地方声明BOOST_DYNAMIC_etc标志)。

我只是努力想还有什么地方我可能会搞砸的配置,还是有一些gotchya使用这些库,排除静态链接(或至少不产生这些LNK4049警告)。

有什么想法吗?

以下是两个项目中编译器/链接器的命令行选项..

应用程序编译器:

/ZI /nologo /W3 /WX- /Od /Oy- /D "BOOST_LIB_DIAGNOSTIC" /D "_GUICON" /D "WIN32" /D "_WINDOWS" /D "_DEBUG" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MTd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Yu"StdAfx.h" /Fp"Debug_Static\MyApp.pch" /Fa"Debug_Static\" /Fo"Debug_Static\" /Fd"Debug_Static\vc100.pdb" /FR"Debug_Static\" /Gd /analyze- /errorReport:queue

应用程序链接器:

/OUT:"C:\VSPRJ10\MyApp\Debug_Static\MyApp.exe" /VERBOSE:Lib /INCREMENTAL:NO /NOLOGO /LTCG:STATUS "MyLib.lib" "setupapi.lib" /NODEFAULTLIB:"MSVCRTD.lib" /NODEFAULTLIB:"msvcprtd.lib" /NODEFAULTLIB:"boost_system-vc100-mt-gd-1_51.lib" /MANIFEST /ManifestFile:"Debug_Static\MyApp.exe.intermediate.manifest" /ALLOWISOLATION /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\VSPRJ10\MyApp\Debug_Static\MyApp.pdb" /MAP /MAPINFO:EXPORTS /SUBSYSTEM:WINDOWS /PGD:"C:\VSPRJ10\MyApp\Debug_Static\MyApp.pgd" /TLBID:1 /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:QUEUE 

库编译器:

/ZI /nologo /W3 /WX- /Od /Oy- /D "_WIN32_WINNT=0x0501" /D "BOOST_LIB_DIAGNOSTIC" /D "WIN32" /D "_DEBUG" /D "_LIB" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MTd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Fp"Debug_Static\MyLib.pch" /Fa"Debug_Static\" /Fo"Debug_Static\" /Fd"Debug_Static\vc100.pdb" /Gd /analyze- /errorReport:queue 

图书馆馆员:

/OUT:"C:\VSPRJ10\MyApp\Debug_Static\MyLib.lib" /NOLOGO /VERBOSE 

0 个答案:

没有答案