是否可以在 cygwin gcc build 中使用在 VC++ 下构建的库?
Posted
技术标签:
【中文标题】是否可以在 cygwin gcc build 中使用在 VC++ 下构建的库?【英文标题】:Is it possible to use libraries build under VC++ in cygwin gcc build? 【发布时间】:2010-07-29 17:52:50 【问题描述】:我有使用 VC++ 构建的库。我想在程序中使用相同的库并在 cygwin gcc 编译器中构建。这种情况可行吗?
【问题讨论】:
你真的需要使用cygwin吗?做什么的? MinGW 在 Windows 环境下的表现要好很多。 【参考方案1】:由于 C++ 没有标准化的 ABI,而且由于 Visual C++ 和 g++ 几乎可以肯定具有不同的 ABI,我认为您不能这样做。您唯一真正的选择是将自己限制为 C,而不是 C++。
编辑:如果您使用的所有库都是纯 C(extern "C"
,在 C++ 术语中),那么您应该能够在编译器之间共享库。 (否则,您的 Cygwin 和 MinGW 应用程序无法调用 Windows API。)您需要小心匹配调用约定。例如,Windows API 使用__stdcall
而不是标准的 C 调用约定。您可以告诉 GCC 使用 function attributes 的调用约定。 Google 和你的库的头文件应该有更多关于使用什么调用约定的信息。
【讨论】:
其实我只想使用 C 语言。有可能吗? 用C当然更容易,但静态库格式还是不一样。 谢谢哥们,这真的很有意义。但是当我尝试编译我的程序时,我得到了重复的声明错误。你有任何线索如何纠正这个错误。这里的场景是,lib 已经编译好了。如果我在 VC 环境中使用这个库,我可以毫无问题地编译程序。但在 cygwin gcc 中,我收到重复的声明错误。 @Martin:没错,我假设了 DLL,并且正在掩饰如何正确地建立这些链接。谢谢指正。 @hellothangam:没有看到您的代码和库,我不知道该告诉您什么。我知道理论上应该是可能的(如果您使用的是 DLL),但我以前没有这样做过。对不起。【参考方案2】:应该不会
mingw 是使用标准 windows 库的 windows 的 GCC 端口(和许多 gnu 工具) - 它几乎是 cygwin 的替代品,应该更容易链接到 gcc。
【讨论】:
实际上根本不是一个替代品——Cygwin 试图在 Windows 之上创建一个 Posix 环境——MinGW GCC 只是一个普通的 Windows 可执行文件,不会做这样的尝试。 @Neil Butterworth - 是的,在 mingw 中使用 gcc 是一样的。但是为使用 cygwin 构建的 posix 平台编写的代码不一定使用 mingw 构建,尽管大多数东西都可以。以上是关于是否可以在 cygwin gcc build 中使用在 VC++ 下构建的库?的主要内容,如果未能解决你的问题,请参考以下文章
gcc和MinGW的异同(在cygwin/gcc做的东西可以无缝的用在linux下,没有任何问题,是在windows下开发linux程序的一个很好的选择)