請幫助我,我有一個奇怪的問題,我無法以任何方式解決。Visual C++ 2005奇怪的鏈接問題
前提:我在Windows 7 x64上使用visual C++ 2005,並且我確信我的代碼並不是致命的缺陷,因爲在Linux下g ++運行良好。
我正在開發一個應用程序,該應用程序使用我開發的靜態庫。
在應用程序的鏈接階段,我得到了兩個神祕的LNK2019錯誤。
這是庫的一個類的標題:
namespace sulfur
{
class Quark
{
public:
... various methods
void addAccel(const Vec2 &a);
... various methods
private:
... various data
};
}
顯然,在cpp文件我提供一個實現了addAccel具有完全相同的簽名。
當我嘗試將應用程序鏈接到庫時,除了addAccel之外,找到了所有其他成員函數。
的符號 「?addAccel @夸克@@ QAEXABV?$ @ TemplateVec2米@ Atlax @@@ Z」
而在的.lib文件有鏈接器搜索(我發現使用DUMPBIN)「 ?addAccel @夸克@硫@@ QAEXABV?$ @ TemplateVec2米@ Atlax @@@ Z」。這裏唯一的區別是鏈接器搜索沒有命名空間部分的錯位名稱,我不知道爲什麼。
我試圖改變名稱,位置,調用約定和簽名的方法,但無濟於事,總是得到相同的錯誤。
第二個錯誤非常相似。我在圖書館的另一頭:
namespace sulfur
{
class Cluster
{
...
Quark *addQuark(sulfur::Feature feat, float x, float y, float m=0.1f, float aF=0.01f);
...
};
}
,並提供了正確的實現文件。像以前一樣,所有其他方法都正確鏈接,但不是addQuark。
鏈接器搜索 「?addQuark @集羣@硫@@ QAEPAVQuark @@ W4Feature @ 2 @ MMMM @ Z」
,但在圖書館有「?addQuark @集羣@硫@@ QAEPAVQuark @ 2 @ W4Feature @ 2 @ MMMM @ Z」。
這次的區別在於編譯器搜索的版本中'@'之間缺少第一個'2'。
這不是我第一次用Visual Studio創建這個應用程序,除了這次與上次更改之外,它總是鏈接正常。
我沒有任何線索, 謝謝提前
如果通過undname運行最後兩個。你會看到它實際上是同樣的錯誤 - 一個是'類Quark'上的方法,另一個是'class sulfur :: Quark'。 – Rup 2010-07-29 08:32:22
是的,但我無法想象爲什麼鏈接器正在搜索類Quark之外的命名空間,因爲它甚至不存在。 – Mitridas 2010-07-29 09:06:54