Dev C++多文件编译问题-阿里云开发者社区

开发者社区> fjie> 正文

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指定之连接静态库

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
DevExpress学习03——label控件的背景色问题
今天使用了DevExpress的labelControl,发现拖放上去,其背景色和主窗体的背景一样,非常不谐调,把BackColor设置为透明也不行(Windows中的Label可以)。 没有办法,我用颜色拾取器,拾取到上方面板颜色是RGB(80,80,80),于是将labelControl背景色改为RGB(80,80,80)颜色就统一了。
955 0
我在macbook编译ananas遇到的问题
我在macbook编译ananas遇到的问题
9 0
C得到文件的大小
先用fopen打开文件,然后把文件指针指向文件尾. 再用ftell获得文件指针当前位置(即文件长度). 源代码:#include "stdafx.h"#include #include using namespace std; int main(){FILE* fp = NULL;int nFileLen = 0; fp = fopen("c:/Test.
479 0
C#编程-124:复制多媒体文件
C#编程-124:复制多媒体文件
11 0
Linux问题情报分享(2):grub-install工具不能处理/dev/xvda*路径
grub-install不能处理/dev/xvda这样的路径,需要重装grub时怎么处理呢?
2296 0
C#选择多个文件并读取多个文件数据
原文:C#选择多个文件并读取多个文件数据 版权声明:本文为博主原创文章,转载请附上链接地址。 https://blog.csdn.net/ld15102891672/article/details/80586097 ...
893 0
+关注
fjie
计算机学生,研究方向为数据挖掘与机器学习,现阶段主要兴趣为深度学习方法在图/网络等非常规(non Euclidean domain)数据中的应用。Github pages: flycser.github.io,Email: hfut_jf@aliyun.com
68
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载