我想在CodeBlocks + GCC中使用用Visual Studio 2013编译的静态库。但不幸的是,我有一些链接问题。
然后,我已经制作了这个示例代码,试图获得一些有用的东西:
#include <iostream>
void HelloWorld()
{
std::cout << "Hello World !" << std::endl;
}
我也写过标题:
#pragma once
void HelloWorld();
不幸的是,当尝试将其与GCC一起使用时,编译最终会失败(链接版本)。 Visual Studio将静态库编译为.lib文件,而MinGW / GCC文件夹中的所有静态库都是.a文件。我在某处读过.aib是纯静态库,当.lib可以是静态库或导入库(用于使用DLL)。
然后,我不知道现在该怎么办?也许在我的代码中有些错误?我承认我不熟悉静态库,因为我也不是常规的VisualStudio用户。 谢谢你的帮助。
答案 0 :(得分:2)
C ++ ABI(应用程序二进制接口)在MSVC ++和gcc之间是不同的:您将无法从在一个编译器中构建并在使用其他编译器构建的对象中定义的对象调用C ++函数。如果要在编译器之间调用函数,则需要通过C接口( 是Windows上的C ABI)并在DLL中隐藏相应的编译器特定的运行时库。