用xulrunner-sdk-36.0 C++编译firefox扩展

Compilation of firefox extension with xulrunner-sdk-36.0 C++

我有一个适用于所有以前版本的 FF 工具栏。我的工具栏部分用 C++ 编写。我尝试使用新的 xulrunner-sdk-36.0 构建 C++ 部分 我收到了这样的 link 错误:

1>xpcomglue_s.lib(nsISupportsImpl.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in Encryption.obj
1>xpcomglue_s.lib(nsStringAPI.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in Encryption.obj
1>xpcomglue_s.lib(nsComponentManagerUtils.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in Encryption.obj
1>xpcomglue_s.lib(nsCOMPtr.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in Encryption.obj
1>xpcomglue_s.lib(nsCRTGlue.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in Encryption.obj
1>xpcomglue_s.lib(nsTArray.obj) : error LNK2038: mismatch detected for '_MSC_VER': value '1800' doesn't match value '1600' in Encryption.obj

从我的第一次研究中,我了解到 VS 版本不兼容的问题。我尝试重新编译 VS2010 和 VS2012,但出现相同的错误。

有人知道怎么解决吗?

_MSC_VER 1800 是 Visual Studio 2013,1600 是 Visual Studio 2010。两种编译器在 C++ 模式下互不兼容,因此您需要重新编译您的项目或 SDK,以便编译器匹配。

1800 对我说 xulrunner SDK 是使用 VS2013 构建的,which is confirmed by the docs,而您的项目仍在使用 VS2010。 (我想当你尝试 VS2012 时,它抱怨 1700 而不是 1600?)

所以您要么需要使用 v120 平台工具集(请参阅项目 Properties/General)在 VS2013 中编译您的项目,要么使用 VS2010 自己编译一个 xulrunner SDK。

从 Gecko 37 开始,您可能会 need to use VS2013 anyway:

Please note that as of Firefox 37, earlier versions of Visual Studio will not work. We've started using features of C++11 that are not supported in Visual Studio 2012 and earlier.