【发布时间】:2010-09-07 18:38:17
【问题描述】:
gcc 是否可以链接到使用 Visual C++ 创建的库?如果是这样,这样做是否会产生任何冲突/问题?
【问题讨论】:
标签: c++ visual-studio gcc linker
gcc 是否可以链接到使用 Visual C++ 创建的库?如果是这样,这样做是否会产生任何冲突/问题?
【问题讨论】:
标签: c++ visual-studio gcc linker
这里答案中的一些 cmets 有点过于笼统。
虽然没有,但在特定情况下,提到的 gcc 二进制文件不会与 VC++ 库 (AFAIK) 链接。链接代码/库的实际方法是所使用的 ABI 标准的问题。
嵌入式世界中越来越普遍的标准是 EABI(或 ARM ABI)标准(基于在 Itanium 开发期间完成的工作http://www.codesourcery.com/cxx-abi/)。如果编译器符合 EABI,它们可以生成可执行文件和库,它们可以相互协作。多个工具链协同工作的一个例子是 ARM 的 RVCT 编译器,它生成的二进制文件可以与 GCC ARM ABI 二进制文件一起使用。
(代码源链接目前已关闭,但可以谷歌缓存)
【讨论】:
我猜不会。通常 c++ 编译器具有完全不同的名称修饰方法,这意味着链接器将无法找到正确的符号。顺便说一句,这是一件好事,因为标准允许 C++ 编译器具有更高级别的不兼容性,而不仅仅是这会导致您的程序崩溃、死亡、吃小狗和把油漆弄得满地都是。
解决此问题的常用方案通常涉及独立于语言的技术,例如 COM 或 CORBA。一个更简单的神圣方法是在你的 C++ 代码周围使用 C“包装器”。
【讨论】:
这是不可能的。通常甚至不可能链接由同一编译器的不同版本生成的库。
【讨论】:
没有。简单明了:-)
【讨论】:
是的,如果你把它做成一个动态链接并把界面做成 c 风格。 lib.exe 将生成与 gcc 工具链兼容的导入库。
这将解决您的链接问题。然而,这只是问题的开始。
您的更大问题将是异常和内存分配等问题。
最重要的是保持一个符合 ANSI C 的简单接口,你应该没问题。疯狂的 C++ 继续落后的事实是可以的,只要它被包含在内。
哦,请确保所有代码都是可重入的,否则您可能会打开另一个 can-o-worms。
【讨论】: