`
ttitfly
  • 浏览: 622109 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

c语言笔记

阅读更多
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语言的基础语法、数据类型、运算符、控制结构、字符串处理以及变量的作用域和存储类别等核心概念。...

    C语言笔记完整版.rar

    这份“C语言笔记完整版”是作者精心整理的学习资料,旨在帮助初学者和进阶者深入理解C语言的核心概念和技巧。 笔记采用不同的颜色来区分内容的重要性,便于读者快速抓住关键信息: 1. **红色文本** - 标记的是学习...

    标准c语言笔记.pdf

    本文档是一份标准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语言笔记.zip计算机二级...

    C语言笔记全整理

    这份"C语言笔记全整理"涵盖了C语言的核心概念和实践技巧,是系统学习和理解C语言的理想资源。以下是对笔记内容的详细解读: 一、基础语法 C语言的基础语法包括变量声明、数据类型(如int、char、float、double等)...

    C语言笔记整理完整版.docx

    C语言笔记整理完整版 本文档提供了C语言的基础概念和实践示例,对初学者非常友好。下面是从文档中提取的知识点: 1. 计算机和编程语言 在计算机中,编程语言是用来控制计算机执行任务的指令集合。C语言是一种高级...

    C语言笔记(整理)

    这份“C语言笔记”是作者在深入学习C语言过程中积累的知识结晶,对于初学者来说,是一份非常实用的学习参考资料。 首先,C语言的基础部分包括变量、数据类型、运算符和表达式。变量是存储数据的容器,C语言提供了...

    C语言笔记,一个很牛的人总结的,挺全的

    C语言笔记总结 以下是对C语言笔记的总结,该笔记记录了一个牛人学习C语言知识点,挺全的。 一、C语言基础 * C语言源文件的扩展名是`.c` * C++源文件的扩展名是`.cpp` * 头文件的扩展名是`.h` * 库文件的扩展名是`...

    郝斌C语言笔记

    《郝斌C语言笔记》是一份重要的学习资料,适合希望提升C语言能力的学习者,它全面覆盖了C语言的基础知识点。本文将详细解读笔记中提及的内容,并对重要的知识点进行阐述。 首先,C语言是一种广泛使用的计算机编程...

    c语言笔记pdf

    从提供的文件信息来看,文件内容为一份《C语言笔记PDF》的部分扫描文字。这部分内容似乎是乱码,可能是由于OCR扫描技术导致的识别错误,也可能是文件损坏或者加密。不过,即使内容无法直接理解,我们仍可以从描述中...

    C语言笔记(经典)

    通过上述分析可以看出,这份C语言笔记覆盖了循环结构、预处理指令、输入输出、字符串处理、枚举类型以及字符类型等多个方面,是一份非常全面的学习资料。对于初学者来说,这些知识点都是学习C语言的基础,掌握它们...

    郝斌老师C语言笔记

    郝斌老师的C语言课程笔记,从指针开始,动态,链表等等

    达内 C语言笔记达内 C语言笔记.doc

    《达内C语言笔记》是一份详尽的教程,涵盖了C语言的基础知识,旨在帮助学习者掌握编程的基本结构和核心概念。以下是对笔记内容的详细解读: ### 第一部分:C编程基本结构及输出函数 #### 1. 标准化 在C语言中,...

    C语言笔记.pdf

    在提供的【部分内容】中,我们可以识别出一些关键的C语言知识点和语法细节。以下将详细阐述这些知识点。 1. 数据类型和变量声明 在C语言中,基本数据类型包括整型(int)、浮点型(float和double)、字符型(char)...

    C语言笔记(涵盖56本C语言经典书目).doc

    说明: 涵盖56本C语言经典书目 C语言知识点总结,很经典的啊!

    C语言笔记(重点、难点)

    这份"C语言笔记(重点、难点)"涵盖了学习C语言过程中最核心的知识点,尤其关注内存管理这一重要主题。以下是对这些关键概念的详细解释: 1. **基本语法**:C语言的基础包括变量定义、数据类型(如int、char、float...

    单片机C语言笔记单片机C语言笔记.doc

    单片机C语言笔记 本节笔记主要集中在单片机C语言编程的基础知识点,涵盖变量声明、操作符、控制结构、数组、指针、函数等方面的内容。 1. 变量声明:void、bit、sbit 等关键字的使用,变量声明的基本规则。 void ...

    辉芒微单片机C语言笔记-Robert.docx

    辉芒微单片机C语言笔记-Robert 本文档提供了一个完整的微单片机C语言笔记,涵盖了头文件包含、引脚定义、变量定义、标志定义、系统和时钟设定、PWM初始化设置、定时器设置等多个方面的知识点。 1. 头文件包含 在...

    郝斌老师C语言笔记rtf

    郝斌老师有个C语言视频教程,这是视频中郝斌老师做的C语言笔记

Global site tag (gtag.js) - Google Analytics