您的位置:首页 > 编程语言 > C语言/C++

Dev C++多文件编译问题

2013-08-21 01:32 148 查看
当需要在主程序中使用以声明的类则是在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指定之连接静态库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  GCC 编译器 C++