初学 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 *.o
bill.o fred.o
[root@localhost c]# gcc -c program.c
program.c: 在函数‘main’中:
program.c:5: 警告:隐式声明与内建函数‘exit’不兼容
[root@localhost c]# ls *.o
bill.o fred.o program.o
[root@localhost c]# gcc -o a *.o
[root@localhost c]# ./a
bill: you passed Hi,How are u
[root@localhost c]#
为什么会需要 lib.c 呢,如果在 windows 下,应该相当于 dll 和头文件的关系既然include了肯定要让代码识别到lib。c这个文件的存在。
windows下的dll和头文件的关系:
头文件只是对dll内符号信息的描述,实现和入口肯定是在dll中的
设为中文环境自然提示就是中文了呗~
1. 头文件的文件名,你写错了。
lib.c --> lib.h2. 需要将bill.c和fred.c编译成动态/静态链接库。并且动态/静态链接库的文件名必须以是lib.so/lib.ao。这样,头文件lib.h才能起作用。
动态链接库: lib.so
静态链接库: lib.a