2015-05-13 109 views
2

我創建了一個靜態庫,其中包含下面的文件alien.h和alien.cpp。該庫由文件user.cpp鏈接。如果用註釋刪除該行,則代碼編譯,鏈接並按預期運行。事實上,圖書館和程序編譯,但程序並沒有鏈接。 MSVC2015RC會產生100多個關於std::numeric_limits已被定義的錯誤。在靜態庫中包含STL

有一些設置,我應該知道或者這是一個MSVC2015錯誤?

文件alien.h

#include <vector> // This line causes troubles. 

struct alien 
{ 
    const int * const value; 
}; 

extern alien meh; 

文件alien.cpp

alien meh { 7 }; 

文件user.cpp

#include "alien.h" 
#include <iostream> 
#pragma comment(lib, "alien.lib") 

int main() 
{ 
    wcout << meh.value; 
    return 0; 
} 

錯誤LNK2005「市民:靜態INT常量性病: :numeric_limits :: max_exponent「(?max_exponent @?$ numeric_limits @ M @ std @@ 2HB)已經在alien.obj中定義了

+0

對我來說就像一個bug,該對象應該有弱聯動 – StenSoft

+0

如何設置一個int(7)const int * const? – Bos

+0

通過修剪不再編譯的程序的外層。我的錯誤;-) – Hector

回答

7

這是一個bug!在沒有啓用語言擴展的情況下,在MSVC2013下編譯相同的庫/程序。在MSVC2015中,必須啓用語言擴展。

+0

謝謝你。我一直在試圖構建icu,並且發現它是直接在bug報告中引用的。 –

+0

我在VS2015中有完全相同的問題。 刪除我所有模塊中的/ Za標誌並沒有解決它 - 任何想法? – SirKnigget

+0

@SirKnigget:檢查解決方法[這裏](https://connect.microsoft.com/VisualStudio/feedback/details/1331482/bug-in-stl)。基本上,你需要修改一個VS頭文件。 – Hector

相關問題