当前位置: 技术问答>linux和unix
初学 Linux 程序设计,问个关于库的错误
来源: 互联网 发布时间:2016-08-19
本文导语: 首先 编写文件 fred.c #include void fred(int arg) { printf("fred: you passed %dn", arg); } ============================ bill.c #include void bill(char* arg) { printf("bill: you passed %sn", arg); } =============================== lib....
首先 编写文件
fred.c
============================
bill.c
===============================
lib.c
============================
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
为什么会需要 lib.c 呢,如果在 windows 下,应该相当于 dll 和头文件的关系
fred.c
#include
void fred(int arg)
{
printf("fred: you passed %dn", arg);
}
============================
bill.c
#include
void bill(char* arg)
{
printf("bill: you passed %sn", arg);
}
===============================
lib.c
void bill(char* );
void fred(int);
============================
program.c
#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
把 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并不在同一文件下。预编译替换文件时就出错了。
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并不在同一文件下。预编译替换文件时就出错了。
|
在我机子上通过。
[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中的
既然include了肯定要让代码识别到lib。c这个文件的存在。
windows下的dll和头文件的关系:
头文件只是对dll内符号信息的描述,实现和入口肯定是在dll中的
|
设为中文环境自然提示就是中文了呗~
|
1. 头文件的文件名,你写错了。
lib.c --> lib.h
2. 需要将bill.c和fred.c编译成动态/静态链接库。并且动态/静态链接库的文件名必须以是lib.so/lib.ao。这样,头文件lib.h才能起作用。
lib.c --> lib.h
2. 需要将bill.c和fred.c编译成动态/静态链接库。并且动态/静态链接库的文件名必须以是lib.so/lib.ao。这样,头文件lib.h才能起作用。
|
动态链接库: lib.so
静态链接库: lib.a
静态链接库: lib.a