如何将多个源文件转换为一个.a文件

问题描述

| 我刚刚发现,代码块(和MingW编译器)仅需要.a库文件,而不是.lib,这是将.lib转换为.a文件的最简单方法...任何教程等都将受到赞赏。 编辑 让我稍微修改一下我的问题,如何将大量源文件转换成一个.a存档文件。     

解决方法

        .lib(和.a也)具有两种不同的功能: 作为程序依赖的共享Dll的导入库。 作为从一个或多个从源编译的目标文件创建的归档库。 您实际上并没有在问题中指定要使用的表单。如果您要执行第二种形式,则必须按照Persson的建议在gcc下将源代码构建为静态库,因为msvc工具使用的库格式不兼容。 但是,如果您正在使用第一种表格,则有一些好消息。 gcc的MinGW端口应能够与使用msvc开发工具创建的coff格式导入库透明地工作。您可以做的就是简单地将“ 0”导入重命名为“ 1”,并将其传递给链接器,就像其他任何“ 2”文件一样。链接器应该能够整理其实际格式。 我已经使用最新的夜间代码块版本在tdm-gcc-4.5.2下对其进行了测试,它似乎可以正常工作。 编辑:合并我的评论作为答案的一部分。 如果您正在使用第二种形式,并且需要从源代码构建静态库,则步骤大致如下: 如果存在现有的msvc项目,则可以将其导入代码块中,以此作为起点。它将在File-> Import Project-> Visual Studio等下。 如果没有可用的方法,那么从头开始创建一个新的C :: B项目并不是很难。只需转到File-> New-> Project,选择\'Static Library \'作为项目类型,然后添加所需的任何源文件。如果库是用半便携式的东西编写的,则应该编译时不会有太多麻烦。     ,        为了回答特定的问题,如何将多个源文件转换为单个归档文件以进行静态链接;这是一个两步操作。您必须首先将源文件编译为目标文件,然后将目标文件转换为归档文件。 如果您的MinGW安装中装有MSYS,建议您使用它。如果没有,您仍然可以使用Windows命令提示符cmd.exe。 确保您的MinGW / bin目录是PATH环境变量的一部分,以便可以从任何地方调用编译器。 从命令行进入包含源代码的目录。从那里输入命令
mingw32-gcc -O2 -c [files] -I[header directory]
您应该专门将ѭ4命名为
-c a.cpp b.cpp c.cpp
,也可以使用
*.cpp
识别它们。
[header directory]
是源.h文件相对于您的位置。通常,源文件将单独位于一个名为/ src的目录中,而头文件位于一个名为/ include的姊妹目录中。您将该目录称为
-I../include
。如果头文件位于/ src目录中名为/ include的目录中,则该目录为“ 9”。 生成.o文件后,键入命令
ar rcs lib[something].a [files]
用库名替换
[something]
。这是将在Code :: Blocks中的“链接库”对话框中使用的名称。文件是您之前创建的目标文件的名称(a.o,b.o,c.o),或者,如果目录中没有不相关的目标文件,则可以输入ѭ12。 这将导致在目录中创建存档文件。现在,您可以将其放置在正确的目录中(可能是/ include的姊妹目录,称为/ lib),并将该目录添加到Linker Search Directories下的Code :: Blocks配置中。然后,您必须记住为项目添加实际的库。     ,        MinGW可以使用.LIB文件。以下链接到使用MS编译器创建的.LIB:
gcc b.c a.lib
在代码块中,将库添加到对话框
Project|Build Options...
中,然后转到
Linker Setting
s选项卡并添加到
Link Libraries
框中。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...