创建MinGW可以链接的MSVC库

时间:2013-04-24 18:48:14

标签: visual-c++ mingw static-libraries name-mangling

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

为避免name-mangling问题,库接口在extern "C"块中声明,仅使用data types common to both C and C++。尽管有这种预防措施,MinGW在尝试编译链接到库的项目时会给出未定义的引用错误。

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

// LibTest.h

#ifndef LIBTEST_H
#define LIBTEST_H

extern "C" {

int Test(int input);

}

#endif

// LibTest.cpp

#include "LibTest.h"

extern "C" {

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

}

VS 2012将其编译为静态库(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"来防止名称错位问题,但由于这是我第一次尝试创建一个与交叉编译器兼容的库,我可能错过了其他的东西。

非常感谢任何建议或意见!

1 个答案:

答案 0 :(得分:0)

我会说微软编译器需要__declspec(dllexport)!

这是一个msdn链接:

https://msdn.microsoft.com/en-US/en-en/library/a90k134d.aspx