使用 gcc 和 msvc 工具集生成的库

Posted

技术标签:

【中文标题】使用 gcc 和 msvc 工具集生成的库【英文标题】:using libraries generated with gcc with msvc toolset 【发布时间】:2014-08-03 00:15:16 【问题描述】:

经过几天的痛苦挣扎,我设法用 MinGW 工具在 windows 下构建了最新的 gtkmm 3.10 库。 生成的输出具有 gcc 扩展名,即。(*.a *.dll.a *.la) 这一切都很好,我正在使用带有 MinGW 的 code::blocks 链接到库,但我想知道是否可以使用 Visual Studio 2013 将这些库与 MSVC++-12.0 工具集链接起来? 所以我不必再使用gnu工具了。 如果是,那么应该怎么做?谢谢。

【问题讨论】:

重建必要的库 using MSVC++ 对您来说不是一个解决方案吗? 我已经阅读了这个链接(使用 MSVC 构建真的很痛苦),它不像使用 mingw 那样简单。需要时不时调整标题,我不太了解,所以如果可能的话,我正在寻找简单的解决方案,谢谢。 @ChronoKitsune 顺便说一句,您发布的链接描述了如何使用 MSVC-10.0 构建它不适用于 MSVC-12.0 :)(至少不是以简单的方式) 不幸的是,我不知道任何将 MinGW 库转换为 MSVC 的解决方案。该页面上有一个指向提供 Cmake 文件的 Github 站点的链接,因此您可以尝试安装 Cmake 并生成可以使用的 MSVC 项目。除此之外,我不知道如何提供帮助,除了可能将 CC 和 CXX 环境变量导出到“cl.exe”并在执行配置脚本之前将包含该可执行文件的 BIN 目录添加到 PATH 环境变量中。 .我从来没有做过,但它可能会奏效。祝你好运。安装程序是否不适用于您的 MSVC 版本? 提供的 gtkmm 安装程序很好,但它们是用旧的 MSVC 版本构建的,这意味着旧的 gtkmm 并且在 VS 中没有 C++11:/ 所以构建自己的东西是“必须”的,感谢您对将 msvc 环境添加到 msys,值得一试(直到第一次构建错误,如果有):) 【参考方案1】:

注意,gtkmm 是一个 c++ 库,而 c++没有 有一个稳定的 abi(应用程序二进制接口)。这意味着在同一编译器的不同版本下编译的静态库可能无法正常工作。这就是为什么它建议为你的 c++ 应用程序/lib 重新编译 c++ 库,这样所有东西都有相同的编译器来构建它。

如果您在 VS2012 中构建应用程序,则需要使用您将使用的 VS2012 版本编译 gtkmm。

但并不是所有的东西都永远丢失了! Herb Sutter 提出了创建一个稳定的 abi。 https://isocpp.org/files/papers/n4028.pdf

【讨论】:

看来我现在正面临这个问题,因为我现在能够在成功构建 gtkmm 后构建示例应用程序:/ 谢谢。【参考方案2】:

又是我,不是我在回答我自己的问题,但我想为阅读此 Q/A 的人提供一些额外的信息。

正如我所说,我构建了自己的 gtkmm 库,而无法构建库的问题在于 code::blocks,此时 code:blocks 让我苦苦挣扎了好几个小时,然后才弄清楚要构建的解决方案您的 gtkmm 应用程序是删除 code::block 并手动编译,而不是在命令行上使用您自己的手动键入的编译标志。 原因是 code::block 没有正确保存我的设置,所以我有未定义的引用。

【讨论】:

以上是关于使用 gcc 和 msvc 工具集生成的库的主要内容,如果未能解决你的问题,请参考以下文章

从 MSVC 输出生成 Makefile 依赖项

从MSVC输出生成Makefile依赖项

[Rust]使用MSVC工具链和VSCode搭建Rust环境

在 MSVC 2010 中编译 64 位应用程序

cmake:让mingw(gcc)生成MSVC可用的dll(.lib)----mark亲测有效

Rust 安装不使用vs生成工具