请帮助我,我有一个奇怪的问题,我无法以任何方式解决。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