我正在尝试使用 MS Visual Studio 2012 创建一个静态库,MinGW 将能够链接到该库(我正在使用 Code::Blocks 处理此过程的 MinGW 端)。
为避免名称混淆问题,库接口在extern "C"
块内声明,并且仅使用C 和 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"
来防止名称修改问题,但由于这是我第一次尝试创建与交叉编译器兼容的库,因此我可能错过了其他一些东西。
任何建议或意见将不胜感激!