2012-03-04 110 views
1

嘗試在Win7 64bit上的Qt Creator中運行以下代碼。Qt創建者:對`boost :: gregorian :: greg_month :: as_short_string()const'的未定義引用

#include <boost/date_time/posix_time/posix_time.hpp> 
#include <boost/date_time/gregorian/gregorian.hpp> 

int main() { 
    using namespace boost::posix_time; 
    ptime t = microsec_clock::universal_time(); 
    std::cout << to_iso_extended_string(t) << "Z\n"; 
} 

這是我的* .pro文件:

INCLUDEPATH += "C:\Program Files (x86)\boost\boost_1_47" 
CONFIG += boost 
LIBS += -L"C:\Program Files (x86)\boost\boost_1_47\lib" 
LIBS += -lboost_date_time-vc71-mt-1_47 

我得到以下錯誤:

c:\Program Files (x86)\boost\boost_1_47\boost\date_time\date_formatting.hpp:49: error: undefined reference to `boost::gregorian::greg_month::as_long_string() const'

c:\Program Files (x86)\boost\boost_1_47\boost\date_time\date_formatting.hpp:44: error: undefined reference to `boost::gregorian::greg_month::as_short_string() const'

我怎樣才能得到這個工作?我讀到,我需要建立日期時間庫,但我不知道我會怎麼做。

回答

3

這些boost庫二進制文件是與Visual C++編譯器一起編譯的(你可以通過文件名中的'vc71'來猜測),但是你在MinGW編譯器中使用QtCreator,而且你不能混合編譯C++庫用不同的編譯器(只有庫的C部分可用)。

您可以繼續使用MinGW並自己重新編譯boost,或者在項目配置中更改QtCreator使用的編譯器,前提是您已安裝該編譯器的任何版本的Visual C++和Qt二進制文件。因爲MinGW可以配置許多不同的不兼容選項,所以重新編譯boost比使用預編譯的二進制文件更安全,除非您確定它們是使用Qt SDK中包含的相同MinGW構建的。

+0

但是,當我使用Visual Studio我得到了如下錯誤:錯誤錯誤LNK1104:無法打開文件 'libboost_date_time-VC100-MT-GD-1_47.lib' 我使用C++安裝程序安裝的推動作用。我可以在/ lib中找到其他libboost_date_time.lib文件,但它們不是這一個 – chikuba 2012-03-04 22:47:29

+0

如果您從boostpro.com,IIRC下載了VC++ boost二進制文件,則必須選擇要安裝的VC++二進制文件的版本(以及從它們下載頁面,10.0似乎是其中之一) – alexisdm 2012-03-04 22:57:12

+0

我該怎麼做才能找到它?它位於C:\ Program Files(x86)\ boost \ boost_1_47 \ lib – chikuba 2012-03-04 23:02:34

相關問題