gcc命令
gcc -I /usr/local/mysql/include mysqlVersion.c -o demo -L /usr/local/mysql/lib -lmysqlclient
--I /usr/local/mysql/include:把/usr/local/mysql/include作为第一个寻找头文件的目录,寻找的顺序是/usr/local/mysql/include-> /usr/include -> /usr/local/include
-L /usr/local/mysql/lib :表示把/usr/local/mysql/lib 作为第一个寻找库文件的目录,寻找顺序为:/usr/local/mysql/lib -> /lib -> /usr/lib -> /usr/local/lib
-lmysqlclient:表示在上面的lib路劲中寻找libmysqlclient动态库文件(如果gcc编译选择中加入了"static"表示寻找libmysqlclient.a静态库文件)cd
编译成功后,产生demo执行程序
./demo 执行报 ./demo: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
是因为执行查找动态mysqlclient是在/usr/lib,/usr/local/lib下查找,不能查到到,解决办法修改ld..so.conf把/usr/local/mysql/lib加入进去,并同时执行ldconfig把配置文件修改同步到ld.so.cache里 ,必需执行ldconfig,不执行就算重启系统都不生效。
gcc -c test.s -o test.o :编译成目标文件test.o不链接, -c 编译成目标文件不链接,-o:指定输出文件名,编译时不加-o,生成文件为文件名test加.o为 test.o
gcc test.o -o test:把目标文件test.o链接为可执行程序test,-o:指定输出文件名
------------------------------------gcc常用编译选项---------------------------------------------------
-c -- 只编译不链接,生成目标文件“.o"
-S -- 只编译不汇编,生成汇编代码
-E -- 只进行预编译,不做其它处理
-g -- 在可执行程序中包含标准调试信息
-o file -- 指定将file文件作为输出文件
-v -- 打印出编译器内部编译各过程的命令行信息和编译器的版本
-I dir -- 在头文件的搜索路径列表中添加dir目录
-static -- 进行静态编译,即连接静态库,禁止使用动态库
-shared -- 1. 可以生成动态库文件 2. 进行动态编译,尽可能地链接动态库,只有没有动态库时才会链接同名的静态库(默认选项,即可省略)
-L dir -- 在库文件的搜索路径列表中添加dir目录
-lname -- 链接称为libname.a(静态库)或则libname.so(动态库)的库文件。若两个库都存在,则根据编译方式(-static 还是-shared)而进行链接
-fPIC(或-fpic) -- 生成使用相对地址的位置无关的目标代码。然后通常使用gcc 的-static选项从该PIC目标文件生成动态库文件。