我应该使用哪些编译选项与使用cl.exe的Boost链接?

时间:2011-10-01 13:46:30

标签: c++ visual-c++ boost hyperlink visual-studio-2010

我有一个程序,我想在命令行上使用cl.exe进行编译。这个程序依赖于一些我无法链接的boost库。

我得到的错误是:

cl /Fosamples\proxy\proxy.obj /c samples\proxy\proxy.cpp /TP /O2 /EHsc 
  /DBOOST_ALL_NO_LIB /DBOOST_THREAD_USE_LIB /DBOOST_SYSTEM_USE_LIB 
  /DBOOST_USE_WINDOWS_H /DTAP_ID=\"tap0901\" /D_WIN32_WINNT=0x0501 /MD /nologo 
  /Isamples\proxy /Iinclude proxy.cpp
link /nologo /MD /OUT:samples\proxy\proxy.exe /LIBPATH:samples\proxy
  /LIBPATH:lib asiotap.lib libboost_system-vc100-mt-1_47.lib
  libboost_thread-vc100-mt-1_47.lib ws2_32.lib gdi32.lib iphlpapi.lib
  advapi32.lib samples\proxy\proxy.obj
LINK : warning LNK4044: unrecognized option '/MD'; ignored 
  asiotap.lib(bootp_builder.obj) : error LNK2001: unresolved external
  symbol "class boost::system::error_category const & __cdecl 
  boost::system::system_category(void)"
  (?system_category@system@boost@@YAAEBVerror_category@12@XZ)

我使用以下命令行从x64 MSVC命令提示符编译了Boost:

.\b2.exe install toolset=msvc --prefix=C:\Boost-VC-x64

如果我查看libboost_system-vc100-mt-1_47.lib,我可以看到:

?system_category@system@boost@@YAABVerror_category@12@XZ

导出。但是如果仔细观察,它与我的编译错误有所不同:

?system_category@system@boost@@YAAEBVerror_category@12@XZ // The symbol I miss
?system_category@system@boost@@YAABVerror_category@12@XZ  // The exported symbol

我想我应该更改Boost或我的编译选项,但无法确定要更改的内容。任何线索?

非常感谢。

1 个答案:

答案 0 :(得分:0)

经过一番调查,我意识到我为一个x86平台编译了Boost,我正在用x64二进制文件进行链接。

我认为在Visual Studio x64命令提示符下编译Boost就足够了,但实际上你必须指定:

.\b2.exe install toolset=msvc address-model=64 --prefix=C:\Boost-VC-x64

让它发挥作用。