C语言库函数假定你是在linux下做这件事 (在windows下应该也是类似的)
假定你要产生的库名字为 libtest.a
1. 实现库函数于 test.c
#include stdio.h
int test()
{
printf("hello world!\n");
return 0;
}
test.h内容:
extern int test();
2. 编译test.c并产生库文件
gcc -c test.c
ar -r libtest.a test.o
3. 其他程序如何调用 libtest.a 里的 test()函数?
main.c
#include "test.h"
int main()
{
return test();
}
4. 编译main.c产生可执行文件
gcc -o main.out main.c -L/path/to/libtest -ltest
5. 运行 main.out
./main.out
PS, 头文件的用处无非就是提供函数原型声明,在我上面给的例子中 , 可以把 test.h 删除, 但是必须在 main.c 里自己加上 extern int test(); 来声明函数 。
C语言:如何自己做库函数?简单的一个例子,但是基本的程序编译的思想都在里面了,具体的需要你自己体会和查资料
跟着下面的步骤走
------------------------
第一步:我的电脑-属性-高级-环境变量
添加3个变量
1.名字:path 值:vc的安装目录里面包含cl.exe的bin目录路径+";"+vc目录下包含mspdb80.dll的目录的路径
比如我的是D:\Program Files\Microsoft Visual Studio 8\VC\bin;D:\Program Files\Microsoft Visual Studio 8\Common7\IDE;
2.名字:include 值:vc安装目录下的include目录,主要是为了找到头文件,我的是D:\Program Files\Microsoft Visual Studio 8\VC\include;D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include;
3.名字:lib 值:vc目录下包含库文件的目录路径
我的是D:\Program Files\Microsoft Visual Studio 8\VC\lib;D:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib;
第二步:需要下面两个文件
//-------------libdemo.c
#include stdio.h
void lib_func()
{
printf("this routine in lib\n");
}
//------------main.c
void lib_func();
int main(int argc, char *argv[])
{
lib_func();
}
第三步:命令
cl /c libdemo.c'编译libdemo.c 生成libdemo.obj
liblibdemo.obj'生成libdemo.lib 库文件
cl /c main.c'编译main.c
link main.objlibdemo.lib'生成main.exe
---------------------------------------------------
呵呵 加点东西,参看4楼的建议,在做个dll,COM组件就不做了,有点复杂了
1 。把libdemo.c 稍微改下
//-------------libdemo.c
#include stdio.h
__declspec (dllexport) void lib_func()
{
printf("this routine in lib\n");
}
2 。命令
cl /c libdemo.c main.c
link libdemo.obj /dll'生成libdemo.lib
link main.obj libdemo.lib
C语言中重新实现库函数fgets是从文件读取c语言库函数具体实现,getchar是从输入读取c语言库函数具体实现,两个还是有区别的
怀疑是gets
如果一定要用fgets的话,那么可以先用freopen重定向输入,来使fgets和getchar的定向相同
以下用gets实现或者被实现
含测试函数main
#include stdio.h
int str_to_int(char *str)
{
int sign = 1;
int ret = 0;
char *p;
p = str;
if(*p == '+') p++;
else if(*p == '-') sign = -1, p ++;
while(*p)
{
if(*p = '0'*p= '9')
ret = ret * 10 + (*p - '0');
else break;
p ++;
}
return sign * ret;
}
int get_int_with_getchar()
{
char a[20] = {0};
int i = 0;
while(i19)
{
a[i] = getchar();
if(a[i] == '\n')
break;
i ++;
}
a[i] = 0;
return str_to_int(a);
}
int get_int_with_gets()
{
char a[20] = {0};
推荐阅读
- 营销如何做到精准引流发展,精准营销如何的精准
- css3文字两边加点,css文字加描边
- js里创建元素,js中创建元素
- cpu热用什么软件,cpu温度用什么软件
- linuxnm命令 linux mknod命令
- 幂函数python,幂函数的定义
- 解谜唯美游戏,解谜唯美游戏大全星球
- 抖音直播中主播如何看数据,抖音直播中如何查看数据
- php显示数据库表信息 php查询数据库并输出表格