使用MinGW将静态库链接到c ++项目的问题

时间:2018-04-15 05:32:17

标签: c++ windows mingw static-libraries

编辑: ***对不起我发现在发布这个问题时肯定会有一些误解,我想说明我已经意识到这个问题被问过几次,没有一个答案可行对我而言***

我一直在尝试将一个简单的静态库测试链接到我的一个c ++项目,但我似乎无法将其完全正确。我知道这是一个非常普遍的话题,很多人已经提出了类似的问题,但即使在阅读了一些答案后,我仍然不能,因为上帝的爱,弄清楚我做错了什么。

我的代码很简单,首先我有一个名为“Math.cpp”的.cpp源文件,如下所示:

#include "Math.h"

int max(int a, int b) {

    return a > b ? a : b;

}
int min(int a, int b) {

    return a < b ? a : b;

}
int floor(double a) {

    return (int) a;

}
int ceil(double a) {

    return (int) a + 1;

}

..为此,我制作了一个名为“Math.h”的头文件,如下所示:

#pragma once

int max(int, int);
int min(int, int);
int floor(double);
int ceil(double);

然后我在cmd上使用以下命令编译“Math.cpp”:

g++ -c Math.cpp -o Math.o

...然后将其编译成静态库,如下所示:

ar rcs libMath.a Math.o

在完成所有这些后,我创建了一个名为“Main.cpp”的新c ++源文件,如下所示:

#include <iostream>
#include "Math.h"

int main() {

    std::cout << max(9, 8) << std::endl;
    return 0;

}

(“Math.h”与“Main.cpp”位于同一目录中)

所以最后为了将“Main.cpp”链接到我的静态库(“libMath.a”),我在cmd中使用以下命令:

g++ -o Main.exe Main.cpp -L. -lMath 

但是,此时,它会抛出以下错误:

C:\Users\zalmar\AppData\Local\Temp\ccmOnvyg.o:Main.cpp:(.text+0x18): undefined reference to `max(int, int)'
collect2.exe: error: ld returned 1 exit status

...我无法弄清楚为什么它找不到具体功能的引用。有些人似乎有同样的问题(here for example)。他们的解决方案是在声明库路径之前声明Main.cpp源文件。但是,对我来说情况并非如此,即使我确定在Main.cpp之后我连接了库,它仍然会出现同样的错误。如果有人能指出我可能做错的任何事情,我会非常感激,因为显然我一定是做错了。否则可能是我的MinGW编译器有问题吗?

我还想再次提到这只是一个测试库,我完全清楚从这样一个简单的程序编译整个静态库可能有点过分。我只想弄清楚如何将库链接到我的c ++项目......

0 个答案:

没有答案
相关问题