初学 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