首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

初学 Linux 程序设计,问个关于库的异常

2012-03-16 
初学 Linux 程序设计,问个关于库的错误首先 编写文件fred.cC/C++ code#include stdio.hvoid fred(int ar

初学 Linux 程序设计,问个关于库的错误
首先 编写文件
 fred.c

C/C++ code
#include <stdio.h>void fred(int arg){    printf("fred: you passed %d\n", arg);}


============================
bill.c
C/C++ code
#include <stdio.h>void bill(char* arg){     printf("bill: you passed %s\n", arg);}


===============================

lib.c
C/C++ code
void bill(char* );void fred(int);


============================
program.c

C/C++ code
#include "lib.c"int main(){    bill("Hi,How are u");    exot(0);}


wengte@linux-ldg2:~/Desktop> gcc -c bill.c fred.c
wengte@linux-ldg2:~/Desktop> ls *.o
bill.o fred.o
wengte@linux-ldg2:~/Desktop> gcc -c program.c
program.c:1:17: error: lib.c: 没有那个文件或目录
wengte@linux-p



为什么会需要 lib.c 呢,如果在 windows 下,应该相当于 dll 和头文件的关系

[解决办法]
有这句#include "lib.c",当然要lib.c了。
不明白楼主想问啥。

[解决办法]
应该用头文件吧!

把 lib.c 改为 lib.h

或把gcc -c -fPIC bill.c fred.c
然后把 program.c 中 #include "lib.c" 去掉
gcc -L./ -lbill -lfred program.c
[解决办法]
wengte@linux-ldg2:~/Desktop> gcc -c bill.c fred.c
wengte@linux-ldg2:~/Desktop> ls *.o
bill.o fred.o
wengte@linux-ldg2:~/Desktop> gcc -c program.c
program.c:1:17: error: lib.c: 没有那个文件或目录
wengte@linux-p
1. 生成动态链接库应该用gcc -shared -o -fIPC链接成so文件。
2. 出现的错误,应该是因为lib.c与program.c并不在同一文件下。预编译替换文件时就出错了。

[解决办法]
C/C++ code
[root@localhost c]# gcc -c bill.c fred.c[root@localhost c]# ls *.obill.o  fred.o[root@localhost c]# gcc -c program.cprogram.c: 在函数‘main’中:program.c:5: 警告:隐式声明与内建函数‘exit’不兼容[root@localhost c]# ls *.obill.o  fred.o  program.o[root@localhost c]# gcc -o a *.o[root@localhost c]# ./abill: you passed Hi,How are u[root@localhost c]#
[解决办法]
为什么会需要 lib.c 呢,如果在 windows 下,应该相当于 dll 和头文件的关系

既然include了肯定要让代码识别到lib。c这个文件的存在。
windows下的dll和头文件的关系:
头文件只是对dll内符号信息的描述,实现和入口肯定是在dll中的
[解决办法]
设为中文环境自然提示就是中文了呗~
[解决办法]
1. 头文件的文件名,你写错了。
lib.c --> lib.h

2. 需要将bill.c和fred.c编译成动态/静态链接库。并且动态/静态链接库的文件名必须以是lib.so/lib.ao。这样,头文件lib.h才能起作用。


[解决办法]
动态链接库: lib.so
静态链接库: lib.a

热点排行