主题:怎样在DEVC++底下建一个自己的库,
_超.C
[专家分:10] 发布于 2010-12-26 19:26:00
请大虾教我怎样在DEV-C++得下建一个自己的库,
我想DC底下建一个自己的库,以后方便自己用。我建了一个.C的文件直接把代码实现放在里面,用的时候直接添加到工程目录下。不需要包含头文件。但有人说我这不是库,和把在主函数中直接写代码是一样的。我想问一下怎样建一个自己的库,以后用的时候像#include <stdio.h>一样直接#include 就好了。顺便问一下头文件怎么做,什么叫头文件包含策略,为什么要这么做 ?
这问题困恼我几个月了,跪求解答
回复列表 (共3个回复)
沙发
_超.C [专家分:10] 发布于 2010-12-26 21:01:00
怎么没人回
板凳
windy0will [专家分:2300] 发布于 2011-01-02 16:54:00
gcc 的c语言编译器里的静态库以.a为后缀名,动态库以.so为后缀名。
您去看看您的dev-cpp安装目录里面的有个ar.exe的程序,ar.exe就是用该把.o文件打包成静态库的。
首页您把DEV-CPP的bin文件夹设置为环境变量path。
比如说,我一般库文件和包含文件放到单独的文件夹里:
包含文件夹为: e;\me\c\include
库文件夹为 : e:\me\c\lib
然后把打包的库文件libtest.a放到 e:\me\c\lib去
[code=c]
/***** 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
/******************************************************************************/
[/code]
[code=c]
/***** 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
/******************************************************************************/
[/code]
把得到的libtest.a放到 e:\me\c\lib文件夹里面去
[code=c]
/***** 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
******************************************************************************/
[/code]
如果您是使用的dev-cpp自带的IDE的话,
在 工具\编译选项\目录\c包含文件 添加 [color=FF0000]e;\me\c\include[/color]目录
在 工具\编译选项\目录\库 添加 [color=FF0000]e:\me\c\lib[/color]目录
在 工具\编译器\在连接器命令行加入以下命令 添加[color=FF0000] -ltest[/color]
或者
在 工具\编译器\编译时加入以下命令 [color=FF0000]-I"e:\me\c\include"[/color]
在 工具\编译器\在连接器命令行加入以下命令 添加 [color=FF0000]-L"e:\me\c\lib" -ltest[/color]
或者
自己写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指定之连接静态库
3 楼
_超.C [专家分:10] 发布于 2011-01-11 20:49:00
虽然看不明白,但还是谢谢
我来回复