在C+中使用第三方库+; 我完全在让我的第三个程序库与我的C++程序一起工作。我正在寻找一些关于实现库时需要采取的一般步骤的一般性建议(40000英尺)

在C+中使用第三方库+; 我完全在让我的第三个程序库与我的C++程序一起工作。我正在寻找一些关于实现库时需要采取的一般步骤的一般性建议(40000英尺),c++,static-libraries,codeblocks,C++,Static Libraries,Codeblocks,首先,一些细节:我使用Windows中的code::blocks作为我的IDE。我喜欢这个IDE,如果我不需要的话,我真的不想切换到其他任何东西(我已经尝试过VisualC++和Linux中的一些东西)。我尝试使用的库是GMP和crypto++ 嗯。我想我知道的是:下载库之后,我将文件解压缩到一个文件夹中。我已经直接解压缩到C:\了,每个zip文件都解压缩到了自己的文件夹(例如C:\cryptopp和C:\gmp)。我认为下一步是建立图书馆,但这是我完全陷入困境的地方。这是怎么做到的?提取的文件

首先,一些细节:我使用Windows中的code::blocks作为我的IDE。我喜欢这个IDE,如果我不需要的话,我真的不想切换到其他任何东西(我已经尝试过VisualC++和Linux中的一些东西)。我尝试使用的库是GMP和crypto++

嗯。我想我知道的是:下载库之后,我将文件解压缩到一个文件夹中。我已经直接解压缩到C:\了,每个zip文件都解压缩到了自己的文件夹(例如C:\cryptopp和C:\gmp)。我认为下一步是建立图书馆,但这是我完全陷入困境的地方。这是怎么做到的?提取的文件中没有可执行文件。据我所知,我相信我是在code::blocks中这样做的,但我不知道怎么做

最后,假设我可以完成这项工作,我相信这将创建.lib文件,在我的代码中实际使用库之前的最后一步是链接到库中。这一部分,我相信我能理解

所以,我的问题很广泛:我是否全面理解这个过程?如果是这样的话,我该如何着手建立这些图书馆,如果事实上这是我所缺少的东西


非常感谢你纵容我的无知。我现在完全没有方向舵,尽管在谷歌上花了好几个小时,我还是没有取得任何进展。另外,请随意更正我所说的任何不正确的事实。非常感谢

通常库中有一个名为makefile的特殊文件,并使用一个名为makefile的实用程序(或其变体之一,在windows中工作的任何工具)构建。
通常,您所要做的就是在解压源文件的目录中运行Make,其余的工作将由它自己完成

如果您提到的那些库(GMP和crypto++;免责声明:我对它们都不熟悉)没有用于code::blocks的项目文件,那么您仍然可以使用MinGW在Windows下编译它们

如果您安装了MinGW,则可以使用MinGW shell导航到适当的目录,在您的示例中,这些目录将是
/c/cryptopp/
/c/gmp
——MinGW shell的工作方式类似于Unix shell,并且具有不同的命名约定

然后您需要编译这些库。检查这些目录中是否有Makefile,如果没有,您可以检查是否有将生成Makefile的
configure
脚本。如果您有Makefile,您可以键入
make
,它将使用GCC编译器的MinGW端口编译库

编译完成后,您应该有一个.a文件形式的库(比如
libcryptopp.a
),可以链接到您的项目。在code::blocks中,您可以将链接器路径(GCC中的
-L
命令行选项)设置为
C:\cryptopp\bin
或库已编译的位置,然后将
libcryptopp.a
添加到要链接的库列表中(这与GCC中的
-L
选项相关联)。惯例是省去lib前缀和.a扩展名,因此只需将
cryptopp
添加到库列表中即可。最后,您的链接器选项应该与

此外,为了能够使用这些库,您需要将headers目录的路径添加到项目的include路径中。这与GCC中的
-I
命令行选项相关联,因此编译器的命令行选项将有类似于
-IC:\cryptopp\include
的内容


当然,以上所有内容都假设您将code::blocks与GCC一起使用。如果将其与VisualC++一起使用,则原理相同,但具体步骤不同。

如果幸运的话,这些库的文件夹中有一个.sln文件。在code::blocks中打开此文件(如果它支持该格式)并编译。如果不是的话,我会尝试在谷歌上找到预编译的库。我开始认为建立库是一个让像我这样的人发疯的阴谋。好的,我已经安装了minGW,启动了它,并导航到/c/cpplibs/gmp/。没有生成文件,但有一个配置文件。因此,我在提示符处键入configure。它一开始运行正常,但随后崩溃并出现错误“找不到工作的编译器,请参阅config.log了解详细信息”?如果minGW不是一个工作的编译器,那么它是什么?我采取的每一步都会导致一个比上一个错误更神秘的错误。我做错了什么?非常沮丧。。。谢谢