Visual c++ 创建一个MinGW可以链接的MSVC库

Visual c++ 创建一个MinGW可以链接的MSVC库,visual-c++,mingw,static-libraries,name-mangling,Visual C++,Mingw,Static Libraries,Name Mangling,我正在尝试使用MS Visual Studio 2012创建一个静态库,MinGW将能够链接到该库(我正在使用Code::Blocks处理此过程的MinGW端) 为了避免出现问题,库接口在extern“C”块中声明并仅使用。尽管有这种预防措施,但在试图编译链接到库的项目时,MinGW会给出未定义的引用错误 该库文件是在VS 2012中从两个文件LibTest.h和LibTest.cpp编译而成的(这些是显示问题的简化示例) VS2012将其编译为一个静态库(LibTest.lib),没有任何问

我正在尝试使用MS Visual Studio 2012创建一个静态库,MinGW将能够链接到该库(我正在使用Code::Blocks处理此过程的MinGW端)

为了避免出现问题,库接口在
extern“C”
块中声明并仅使用。尽管有这种预防措施,但在试图编译链接到库的项目时,MinGW会给出未定义的引用错误

该库文件是在VS 2012中从两个文件LibTest.h和LibTest.cpp编译而成的(这些是显示问题的简化示例)


VS2012将其编译为一个静态库(LibTest.lib),没有任何问题。我对MinGW的测试程序如下:

// LibTest.lib is linked in the project settings
#include "LibTest.h" // Same LibTest.h as above

int main(){

    int x = 5;
    int a = Test(x);

    return 0;
}
当我试图编译此文件时,进程失败,出现了一个未定义的引用错误(与试图链接名称被破坏的库时产生的错误相同)。我希望使用
extern“C”
来防止名称损坏问题,但由于这是我第一次尝试创建一个与交叉编译器兼容的库,我可能错过了其他一些东西


如有任何建议或意见,将不胜感激

我认为微软编译器需要declspec(dllexport)

以下是msdn链接:


为什么不发布准确的错误消息,让每个人都能准确地看到MinGW要找的名字?发布
dumpbin/symbols LibTest.lib的输出也可能有帮助,这样我们可以看到MSVC创建的库中有哪些名称。MinGW的确切错误是:
obj\Release\main.o:main.cpp(.text+0x16):测试的未定义引用
dumpbin/symbols
的输出只是“文件类型:库”。有趣的是,
reimp
在LibTest.lib上运行时也不会生成任何输出。看起来VS 2012生成的库在某种程度上是无效的。当尝试从另一个VS 2012项目链接到库(删除
extern“C”
块以防引起问题)时,生成失败,出现
错误LNK2001:未解析的外部符号“int\u cdecl Test(int)”(?Test@@YAHH@Z)
我不确定该库可能出了什么问题;我创建它的过程与上述详细过程相匹配。如果从命令行构建库,会发生什么情况:
cl/c libtest.cpp&&lib libtest.obj
从命令行构建库可以正常工作,也可以专门用于创建与MinGW一起工作的库。显然,我的VS 2012项目设置有问题。MinGW在链接库时生成警告:
警告:.drectve/DEFAULTLIB:“LIBCMT”/DEFAULTLIB:“OLDNAMES”无法识别
,但生成的程序可以工作。谢谢你的帮助,@MichaelBurr!
// LibTest.cpp

#include "LibTest.h"

extern "C" {

int Test(int input){
    return (input + 5);
}

}
// LibTest.lib is linked in the project settings
#include "LibTest.h" // Same LibTest.h as above

int main(){

    int x = 5;
    int a = Test(x);

    return 0;
}