1.归档举例
A:定义一个c语言头文件:foo.h
#ifndef __FOO_H__
#define __FOO_H__
void show(int i);
#endif
B:定义一个c语言原文件:foo.c
#include <stdio.h>
void show(int i) {
printf("Hello! %d\n", i);
}
c语言中,
.c文件最终要么成一个可执行文件(必须要有main函数),要么成了一个动态连接文件(.so),中间转换过程:
第一步:.c编译成.o(.o实际上就是一个二进制文件,编译时只找所依赖.h头文件。不找所依赖的.a文件)
第二步:.o归档成.a (一般都不会执行这步,除非自己写的要给别人调用,特意执行这步)
第三步:.a连接成一个可执行文件(默认是a.out,一般通过-o参数改名成没有后缀的)
第二步可以省略。
比如:
编译: gcc -c foo.c (只是编译)
注:如果直接gcc foo.c那么默认是编译并且连接,会报错。因为这样的话,就是要生成动态连接文件(需要加参数-shared)或者是生成可执行文件。因为生成动态连接文件需要加参数-shared,所以确定是生成一个可执行文件。但是没有main函数,所以就报错了。
归档:ar -r libfoo.a foo.o
注:可以把多个.o文件归档,
.a文件一般以lib开头
2.调用归档文件举例
建立一个bar.c文件
#include "foo.h"
int main() {
show(123);
return 0;
}
#include "foo.h" ""是指在当前目录下找foo.h
如果是<foo.h> <>是指在系统所指定的目录(如:/usr/include等) 再加上 C_INCLUDE_PATH环境变量指定的目录下找,默认是/usr/include/下找foo.h
因为有main函数(一般返回0表示正常),所以可以直接生成一个可执行的文件
通过调用.a文件来编译并连接:gcc bar.c -lfoo -L.(默认生成一个a.out可执行文件)
注: -lfoo 的意思是去找libfoo.a ,不是-llibfoo,不需要加lib
-L. 的意思是在
当前目录下找libfoo.a,如果不指定就会去/usr/lib下找。-L只适用于静态文件,不适用于动态文件
也可以通过-o参数改名字: gcc -o foo bar.c -lfoo -L.生成的foo就是一个可执行的文件。
3.生成动态连接库举例:
gcc -shared foo.c 默认生成的还是a.out,因为加的是-shared参数,所以生成的a.out是一个动态连接库文件,所以最好改个名字gcc -o foo.so -shared foo.c
通过动态连接库编译连接bar.c文件
gcc -o bar bar.c foo.so
生成的bar文件是个可执行文件,可以通过
ldd bar命令查看bar文件所依赖的所有动态连接库
比如:
[mahaibo@search2 c]$ ldd bar
foo.so (0x00e25000)
libc.so.6 => /lib/tls/libc.so.6 (0x0019a000)
/lib/ld-linux.so.2 (0x0017c000)
执行./bar会报异常:./bar: error while loading shared libraries: foo.so: cannot open shared object file: No such file or directory
因为执行的时候默认会去/usr/lib下找动态连接库,而foo.so不在/usr/lib目录下。所以需要加个环境变量
export LD_LIBRARY_PATH=/home/mahaibo/c
再执行即可.
env 查看所有环境变量
echo $LD_LIBRARY_PATH 查看某个环境变量
4.用c调用mysql:
因为用户登录时默认会去执行用户目录下的.bashrc文件,所以需要把mysql给c调用的一些库文件添加到环境变量里,所以需要在.bashrc文件里添加内容:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/mysql 找动态连接库目录
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/include/mysql 找头文件目录
export LIBRARY_PATH=$LIBRARY_PATH:/usr/lib/mysql 找.a文件目录
也可以在系统文件里添加:/etc/profile
连接mysql的一个实例:
#include <stdio.h>
#include <mysql.h>
int main() {
MYSQL *conn;
MYSQL_RES *res;
conn = mysql_init(NULL);
mysql_real_connect(conn, "localhost", "usename", "password", "", 3306, "/tmp/mysql.sock", 0);
int d, t;
char db[20];
char sql[40];
for (d=0; d<21; ++d) {
snprintf(db, 20, "srcstore%d", d);
mysql_select_db(conn, db);
for (t=0; t<51; ++t) {
snprintf(sql, 40, "alter table srcItem%d engine = myisam", t);
int r = mysql_query(conn, sql);
if (r==0) {
printf("db: %d table: %d OK\n", d, t);
} else {
printf("db: %d table: %d ERROR\n", d, t);
}
}
}
mysql_close(conn);
return 0;
}
分享到:
相关推荐
从给定的文件标题“C语言笔记”及描述与部分内文中,我们可以提炼出一系列关于C语言的关键知识点,这些知识涵盖了C语言的基础语法、数据类型、运算符、控制结构、字符串处理以及变量的作用域和存储类别等核心概念。...
这份“C语言笔记完整版”是作者精心整理的学习资料,旨在帮助初学者和进阶者深入理解C语言的核心概念和技巧。 笔记采用不同的颜色来区分内容的重要性,便于读者快速抓住关键信息: 1. **红色文本** - 标记的是学习...
本文档是一份标准C语言的学习笔记,内容涵盖了结构体、宏定义、操作符优先级、函数声明等知识点,是结合作者在C/C++开发经历和阅读《THE C PROGRAMMING LANGUAGE》以及《C Traps and Pitfalls》等书籍的总结。...
计算机二级C语言笔记.zip计算机二级C语言笔记.zip计算机二级C语言笔记.zip 计算机二级C语言笔记.zip计算机二级C语言笔记.zip计算机二级C语言笔记.zip 计算机二级C语言笔记.zip计算机二级C语言笔记.zip计算机二级...
这份"C语言笔记全整理"涵盖了C语言的核心概念和实践技巧,是系统学习和理解C语言的理想资源。以下是对笔记内容的详细解读: 一、基础语法 C语言的基础语法包括变量声明、数据类型(如int、char、float、double等)...
C语言笔记整理完整版 本文档提供了C语言的基础概念和实践示例,对初学者非常友好。下面是从文档中提取的知识点: 1. 计算机和编程语言 在计算机中,编程语言是用来控制计算机执行任务的指令集合。C语言是一种高级...
这份“C语言笔记”是作者在深入学习C语言过程中积累的知识结晶,对于初学者来说,是一份非常实用的学习参考资料。 首先,C语言的基础部分包括变量、数据类型、运算符和表达式。变量是存储数据的容器,C语言提供了...
C语言笔记总结 以下是对C语言笔记的总结,该笔记记录了一个牛人学习C语言知识点,挺全的。 一、C语言基础 * C语言源文件的扩展名是`.c` * C++源文件的扩展名是`.cpp` * 头文件的扩展名是`.h` * 库文件的扩展名是`...
《郝斌C语言笔记》是一份重要的学习资料,适合希望提升C语言能力的学习者,它全面覆盖了C语言的基础知识点。本文将详细解读笔记中提及的内容,并对重要的知识点进行阐述。 首先,C语言是一种广泛使用的计算机编程...
从提供的文件信息来看,文件内容为一份《C语言笔记PDF》的部分扫描文字。这部分内容似乎是乱码,可能是由于OCR扫描技术导致的识别错误,也可能是文件损坏或者加密。不过,即使内容无法直接理解,我们仍可以从描述中...
通过上述分析可以看出,这份C语言笔记覆盖了循环结构、预处理指令、输入输出、字符串处理、枚举类型以及字符类型等多个方面,是一份非常全面的学习资料。对于初学者来说,这些知识点都是学习C语言的基础,掌握它们...
郝斌老师的C语言课程笔记,从指针开始,动态,链表等等
《达内C语言笔记》是一份详尽的教程,涵盖了C语言的基础知识,旨在帮助学习者掌握编程的基本结构和核心概念。以下是对笔记内容的详细解读: ### 第一部分:C编程基本结构及输出函数 #### 1. 标准化 在C语言中,...
在提供的【部分内容】中,我们可以识别出一些关键的C语言知识点和语法细节。以下将详细阐述这些知识点。 1. 数据类型和变量声明 在C语言中,基本数据类型包括整型(int)、浮点型(float和double)、字符型(char)...
说明: 涵盖56本C语言经典书目 C语言知识点总结,很经典的啊!
这份"C语言笔记(重点、难点)"涵盖了学习C语言过程中最核心的知识点,尤其关注内存管理这一重要主题。以下是对这些关键概念的详细解释: 1. **基本语法**:C语言的基础包括变量定义、数据类型(如int、char、float...
单片机C语言笔记 本节笔记主要集中在单片机C语言编程的基础知识点,涵盖变量声明、操作符、控制结构、数组、指针、函数等方面的内容。 1. 变量声明:void、bit、sbit 等关键字的使用,变量声明的基本规则。 void ...
辉芒微单片机C语言笔记-Robert 本文档提供了一个完整的微单片机C语言笔记,涵盖了头文件包含、引脚定义、变量定义、标志定义、系统和时钟设定、PWM初始化设置、定时器设置等多个方面的知识点。 1. 头文件包含 在...
郝斌老师有个C语言视频教程,这是视频中郝斌老师做的C语言笔记