我刚刚发现Code Blocks(和MingW编译器)只需要.a库文件而不是.lib将.lib转换为.a文件的最简单方法是什么...任何教程等都会受到赞赏。 的修改 让我稍微修改一下我的问题如何将多个源文件转换为一个.a存档文件。
答案 0 :(得分:3)
要回答具体问题,如何将多个源文件转换为单个存档文件以进行静态链接;这是一个两步操作。您必须首先将源文件编译为目标文件,然后将目标文件转换为存档。
如果你的MinGW安装有MSYS,我推荐使用它。如果没有,您仍然可以使用Windows的命令提示符cmd.exe。
确保您的MinGW / bin目录是PATH环境变量的一部分,因此您可以从任何地方调用编译器。
从命令行进入保存源代码的目录。从那里,输入命令
mingw32-gcc -O2 -c [files] -I[header directory]
您应该专门为[files]
命名-c a.cpp b.cpp c.cpp
,或者您可以使用*.cpp
识别它们。 [header directory]
是源的.h文件相对于您的位置。通常,源文件本身位于名为/ src的目录中,而姐妹目录中的头文件称为/ include。您将该目录称为-I../include
。如果头文件位于/ src目录中名为/ include的目录中,则为-Iinclude
。
生成.o文件后,键入命令
ar rcs lib[something].a [files]
将[something]
替换为库的名称。这是将在Code :: Blocks中的链接库对话框中的名称。文件是您之前创建的目标文件的名称(a.o,b.o,c.o),或者,如果目录中没有不相关的目标文件,您可以放入*.o
。
这应该导致在目录中创建存档文件。您现在可以将它放在正确的目录(可能是/ include called / lib的姐妹目录)中,并将该目录添加到链接器搜索目录下的Code :: Blocks配置中。然后,您必须记住为您的项目实际添加库。
答案 1 :(得分:2)
MinGW可以使用.LIB文件。以下指向使用MS编译器创建的.LIB的链接:
gcc b.c a.lib
在代码块中,您可以在对话框Project|Build Options...
中添加库,然后转到Linker Setting
选项卡并添加到Link Libraries
框。
答案 2 :(得分:1)
.lib(和.a也)在两种不同的容量下工作:
你没有在你的问题中真正指明你正在使用哪种形式。如果您正在寻找第二种形式,则必须根据Persson的建议将gcc下的源构建为静态库,因为msvc工具使用的库格式不兼容。
然而,如果你正在处理第一个表格,那么有一些好消息。 gcc的MinGW端口应该能够与使用msvc开发工具创建的coff格式导入库透明地工作。您可以做的只是将*.lib
导入重命名为lib*.a
,然后将其传递给链接器,就像它的任何其他*.a
文件一样。链接器应该能够整理其真实格式。
我已经在tdm-gcc-4.5.2下使用最新的每晚编译代码块进行了测试,看起来工作正常。
编辑:将我的评论合并为答案的一部分。 如果您正在使用第二个表单并需要从源代码构建静态库,则步骤大致如下:
如果存在现有的msvc项目,您可以将其作为起点将其导入到代码块中。它将在 File-> Import Project-> Visual Studio 等下。
如果没有可用的话,从头开始创建一个新的C :: B项目并不困难。只需转到 File-> New-> Project 选择' Static Library '作为项目类型,然后添加所需的任何源文件。如果库是用半便携式编写的,它应该编译而不会有太多麻烦。