【问题标题】:Name mangling problems when using GNU linker to link to VC++ compiled library使用 GNU 链接器链接到 VC++ 编译库时的名称修改问题
【发布时间】:2010-08-20 22:37:10
【问题描述】:

在提出这个问题时,我希望更好地了解情况,或者最好找到解决方案。

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

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

目前的想法:

  • 最明显的方法是使用 GNU 工具链重新编译 HyDE.lib。事实证明,这比它的价值要复杂得多。但是,我在这里没有调查过一种途径。我们有一个据说可以构建到 unix 的 cmake 文件......有没有办法让 cmake 代替使用 Cygwin GNU?我对 cmake 真的一无所知(对 make 也知之甚少),所以参考一些好的信息会很好。
  • 我可以将 Eclipse CDT 连接到 Window 编译器工具。是的,但我可以说这并不容易,而且我可能会失去调试甚至代码完成。然后是 Eclipse Wascana,但我阅读了最近的一篇博客,表明 Wascana 社区正在衰落。
  • 是否有任何类型的库拆解器-重组器?我想象一个程序,我也将提供一个 Windows 编译库,该程序会挑选出符号,对它们进行解构,然后创建一个具有相同符号但以 GNU 方式进行错位的库。在这一点上,我正在编造一些东西,所以也许有人可以帮助我更好地理解这里的名称修改。

有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    除非您将大部分代码放在带有extern "C" 块的HyDE.lib 中,否则最好的选择是使用G++ 重新编译它。即使您确实将它放在extern "C" 块中,我仍然建议使用 G++ 编译它,因为它通常(但并非总是)比 MSVC 对标准有更好的支持。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 盲人,你不会是瞎子吧?如果是这样,我可能对您的编程设置有疑问?
      • 不,我不是瞎子,我的“把手”说来话长<.>
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-12
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多