2016-12-14 69 views
0

我在項目utils的一類,如下所示:解析外部符號鏈接錯誤(但僅有部分項目)

Maths.h

class __declspec(dllexport) Maths 
{ 
public: 
    static const double c_epsilon; 

    ... 
} 

Maths.cpp

const double Maths::c_epsilon = DBL_EPSILON; 

然後我有(很多)其他項目使用這個類(並使用c_epsilon c onstant)。

幾乎所有其他項目的建設和鏈路沒有問題...但一對夫婦失敗,出現錯誤:

LNK2001 unresolved external symbol "__declspec(dllimport) public: static double const Maths::c_epsilon" ([email protected]@@2NB)

兩個失敗的項目比製作一個可執行文件(而不是谷歌都測試項目及其他DLL)似乎設置爲與其他所有項目相同。

失敗的項目肯定會指定Utils.lib文件。

我只能想象這是一個項目設置問題(因爲其他項目很好),但我找不到任何不同的設置來解決問題。

+0

您是否在解決方案中定義了二進制文件之間的依賴關係? –

+0

@KirillKobelev是的,我是。 – grae22

+0

然後AFAIK你不需要指定.lib文件。 Lib文件應該用於不屬於解決方案的DLL。 –

回答

1

發現有問題的項目將輸出文件夾$(OutDir)指定爲查找其他依賴項的路徑。這是有問題的,因爲在構建的這一點上,輸出文件夾仍然包含作爲構建後步驟(應該可能需要審查的過程)複製的「舊」lib文件。

'舊'lib文件來自一個常量沒有被實際聲明爲'const'(僅僅是靜態)的構建 - 這已被改變,因此導致無法解析的外部符號錯誤。

相關問題