使用GNU链接器链接到VC ++编译库时命名错误问题

时间:2010-08-20 22:37:11

标签: c++ linker eclipse-cdt visual-c++

在提出这个问题时,我正在寻求更好地了解情况或最好是解决方案。

我创建了C ++代码,我希望能够使用Eclipse CDT IDE而不是Visual Studios,(我的工作场所更适合Eclipse)。这意味着,实际上,我必须使用GNU工具链来编译我的代码。对于手头的项目,我必须链接到一个名为HyDE.lib的库,该库是使用Visual Studios编译器编译的。当然,我遇到的问题是GNU链接器在HyDE中找不到合适的符号,因为(我认为)两个编译器都使用不同的名称修改方案。

那么我该如何解决这个问题呢?

当前的想法:

  • 最明显的事情是用GNU工具链重新编译HyDE.lib。事实证明这比它的价值要复杂得多。但是,有一条途径我没有在这里调查过。我们有一个cmake文件,据说可以构建到unix ...有没有办法让cmake改为使用Cygwin GNU?我对cmake一无所知(关于make的知之甚少),所以对良好信息的引用会很好。
  • 我可以将Eclipse CDT连接到Window编译器工具。是的,但最好我可以告诉这并不容易,我可能会失去调试甚至代码完成。然后是Eclipse Wascana,但我读了一篇最近的博客,表明Wascana社区正在努力。
  • 是否有任何类型的库demangler-remangler?我想象一个程序,我也会提供一个Windows编译的库,程序会选择符号,对它们进行解码,然后创建一个具有相同符号的库,但是以GNU方式进行了修改。在这一点上,我正在制作东西,所以也许有人可以帮助我更好地理解这里的名字损坏。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

除非你将大部分代码放在HyDE.lib中并加上extern "C"块,否则最好的办法是用G ++重新编译它。即使你把它放在extern "C"块中,我仍然建议用G ++编译它,因为它通常(但不总是)比MSVC更好地支持标准。

答案 1 :(得分:0)

作为替代方案,完成将库编译为.dll文件并使用它。只需确保将入口点放在extern "C"块中。