Dev C++多文件编译问题

简介: 当需要在主程序中使用以声明的类则是在main()前插入使用类的声明的文件即可这样做的条件是你把类的.cpp文件编译成库,然后编译main()文件时把库连接进去。

当需要在主程序中使用以声明的类则是在main()前插入使用类的声明的文件即可

这样做的条件是你把类的.cpp文件编译成库,

然后编译main()文件时把库连接进去。


或者你建立一个工程,编译器应该会自动连接的。

gcc 的c语言编译器里的静态库以.a为后缀名,动态库以.so为后缀名。
dev-cpp安装目录里面的ar.exe程序就是用了来该把.o文件打包成静态库。
首先把DEV-CPP的bin文件夹设置为环境变量path。
比如说,一般库文件和包含文件放到单独的文件夹里:
包含文件夹为: e;\me\c\include (自己设置)
库文件夹为  : e:\me\c\lib(自己设置)
然后把打包的库文件libtest.a放到 e:\me\c\lib去


/***** test.h *****/
/**  该文件放到 e:\me\c\include **/
#ifndef _test_h_
#define _test_h_

#include <stdio.h>

#define func() printf( "\n%s:%d ",__func__, __LINE__)

void __cdecl test ( void);

#endif
/******************************************************************************/


 


                        /***** test1.c *****/
#include <stdio.h>
#include < test.h>

void __cdecl
test  ( void)
{
  printf( "\n\n\nFunction:test1 Line:%d ",__LINE__);
  func  ();/* 输出test1函数第8行: test1:8 */
}
/*****************************生成静态库:*************************************/
    gcc -I "e:\me\c\include"  -Wall -O3 -c -o test.o test.c
    ar -ruv libtest.a test.o
    del /F test.o                                   
/******************************************************************************/


把生成的libtest.a放到 e:\me\c\lib文件夹里面去


                        /***** main.c *****/
#include <stdio.h>
/*
在编译的时候加上-I参数,连接时加上-L -l参数可以使用<>的包含文件了 */
#include < test.h>

int main ( void)
{
  func ();
  test ();

  return 0;
}
/***************************编译命令为:**************************************** 
  gcc -I "e:\me\c\include" -O3 -Wall main.c -o main.exe -L "e:\me\c\lib" -ltest
******************************************************************************/


如果是使用的dev-cpp自带的IDE的话,
在 工具\编译选项\目录\c包含文件 添加 e;\me\c\include目录
在 工具\编译选项\目录\库 添加 e:\me\c\lib目录
在 工具\编译器\在连接器命令行加入以下命令 添加 -ltest

或者
在 工具\编译器\编译时加入以下命令 -I"e:\me\c\include"
在 工具\编译器\在连接器命令行加入以下命令 添加 -L"e:\me\c\lib" -ltest

或者
自己写makefile文件

这样,以后就可以像这样使用自己写的 头文件和库了 :#include <test.h>
当然也可以这样写 #include "test.h"


gcc部分最常用的参数简单介绍:
-I    指定c包含文件,和 安装目录下的 include文件夹 一样的作用
-Wall 尽可能的显示所有的警告信息
-O3   第3级优化,把部分变量移进 寄存器,并结合特定的cpu特性
-c    生成.o文件
-S    S要大写,只编译成汇编代码.s文件,是gas汇编
-o    后面跟的是目标文件名
-E    只激活预处理
-fomit-frame-pointer 直接使用esp寻址,不使用ebp寻址,对效率有一定的帮助
-D    相当于在文件开头处定义一个宏,如-Dmacro=1相当于#define macro 1
....
对于ld的参数
-L    后面指定库文件目录
-l    后面指定哭文件名,通常的库文件是以lib开头,.a结尾,如libtest.a,在连接的时候可以省略lib和.a;如 -ltest
-static 默认情况下,首先优先连接动态库,用-static指定之连接静态库

目录
相关文章
|
8月前
|
C++ Windows
.NET Framework安装不成功,下载`NET Framework 3.5`文件,Microsoft Visual C++
.NET Framework常见问题及解决方案汇总,涵盖缺失组件、安装失败、错误代码等,提供多种修复方法,包括全能王DLL修复工具、微软官方运行库及命令行安装等,适用于Windows系统,解决应用程序无法运行问题。
1161 3
|
9月前
|
存储 算法 安全
c++模板进阶操作——非类型模板参数、模板的特化以及模板的分离编译
在 C++ 中,仿函数(Functor)是指重载了函数调用运算符()的对象。仿函数可以像普通函数一样被调用,但它们实际上是对象,可以携带状态并具有更多功能。与普通函数相比,仿函数具有更强的灵活性和可扩展性。仿函数通常通过定义一个包含operator()的类来实现。public:// 重载函数调用运算符Add add;// 创建 Add 类的对象// 使用仿函数return 0;
279 0
|
自然语言处理 编译器 C语言
为什么C/C++编译腰要先完成汇编
C/C++ 编译过程中先生成汇编语言是历史、技术和实践的共同选择。历史上,汇编语言作为成熟的中间表示方式,简化了工具链;技术上,分阶段编译更高效,汇编便于调试和移植;实践中,保留汇编阶段降低了复杂度,增强了可移植性和优化能力。即使在现代编译器中,汇编仍作为重要桥梁,帮助开发者更好地理解和优化代码。
为什么C/C++编译腰要先完成汇编
|
自然语言处理 编译器 Linux
告别头文件,编译效率提升 42%!C++ Modules 实战解析 | 干货推荐
本文中,阿里云智能集团开发工程师李泽政以 Alinux 为操作环境,讲解模块相比传统头文件有哪些优势,并通过若干个例子,学习如何组织一个 C++ 模块工程并使用模块封装第三方库或是改造现有的项目。
1037 56
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
Linux C++
Linux c/c++文件的基本操作
在Linux环境下使用C/C++进行文件的基本操作,包括文件的创建、写入、读取、关闭以及文件描述符的定位。
252 0
Linux c/c++文件的基本操作
|
Linux 编译器 C语言
Linux c/c++之多文档编译
这篇文章介绍了在Linux操作系统下使用gcc编译器进行C/C++多文件编译的方法和步骤。
217 0
Linux c/c++之多文档编译
|
Linux C++
Linux c/c++文件虚拟内存映射
这篇文章介绍了在Linux环境下,如何使用虚拟内存映射技术来提高文件读写的速度,并通过C/C++代码示例展示了文件映射的整个流程。
479 0
|
Linux C++
Linux c/c++文件移动
这篇文章介绍了在Linux环境下,使用C/C++语言通过命令方式和文件操作方式实现文件移动的方法。
387 0