Linux C 编译

  1.  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目标文件生成动态库文件。

你可能感兴趣的:(Linux C 编译)