Linux C 編譯

  1.  gcc命令mysql

    gcc -I /usr/local/mysql/include mysqlVersion.c -o demo -L /usr/local/mysql/lib -lmysqlclientsql

    ‍‍‍‍‍‍‍‍‍--I /usr/local/mysql/include/usr/local/mysql/include做爲第一個尋找頭文件的目錄,尋找的順序是/usr/local/mysql/include-> /usr/include -> /usr/local/includespa

    -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,不執行就算重啓系統都不生效。io

    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:指定輸出文件名test

    ------------------------------------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目標文件生成動態庫文件。

相關文章
相關標籤/搜索