2011-10-01 37 views
0

我有一個程序,我想在命令行上使用cl.exe進行編譯。這個程序依賴於一些我未能鏈接到的boost庫。我應該使用哪些編譯選項與使用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)" 
    ([email protected]@[email protected]@[email protected]@XZ) 

我編譯升壓,使用下面的命令行,從x64 MSVC命令提示符:

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

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

[email protected]@[email protected]@[email protected]@XZ 

已導出。但是,如果你仔細觀察它不同於一個有點在我的編譯錯誤:

[email protected]@[email protected]@[email protected]@XZ // The symbol I miss 
[email protected]@[email protected]@[email protected]@XZ // The exported symbol 

我想我應該要麼改變升壓或我的編譯選項,但想不通的是什麼確切地發生改變。任何線索?

非常感謝。

+1

使用undname.exe實用工具來取消名稱的縮小。多餘的字母是__ptr64。聽起來你想鏈接到32位版本的boost。不知道爲什麼連接器不會爲此大喊大叫,它通常會這樣。 –

+0

@HansPassant非常感謝。事實確實如此。不知道'undname.exe':絕對有用:) – ereOn

+0

可能的重複[試圖鏈接升壓1.52線程](http://stackoverflow.com/questions/14674374/trying-to-link-boost-1- 52線程) – Protoss

回答

0

經過一番調查之後,我意識到我編譯了一個x86平臺的Boost,我正在使用x64二進制連接。

我認爲編譯一個Visual Studio 64的命令提示符內加速已經足夠,但實際上必須註明:

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

要使它發揮作用。

相關問題