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

Which compilation options should I use to link with Boost using cl.exe?

本文关键字:exe 链接 cl Boost 编译选项 我应该      更新时间:2023-10-16

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

得到的错误是:

cl /Fosamplesproxyproxy.obj /c samplesproxyproxy.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 
  /Isamplesproxy /Iinclude proxy.cpp
link /nologo /MD /OUT:samplesproxyproxy.exe /LIBPATH:samplesproxy
  /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 samplesproxyproxy.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或我的编译选项,但无法确定要改变什么。有线索吗?

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

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

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