日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

gcc编译c文件 python.h 未找到

發(fā)布時(shí)間:2025/3/15 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gcc编译c文件 python.h 未找到 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

windows 下默認(rèn)路徑找不到python.h

gcc -c -I d:/ProLang/python379/include parser.c -o parser.so
加上文件路徑就可以了。

GCC 編譯器在編譯一個(gè)C語言程序時(shí)需要經(jīng)過以下 4 步:
將C語言源程序預(yù)處理,生成.i文件。
預(yù)處理后的.i文件編譯成為匯編語言,生成.s文件。
將匯編語言文件經(jīng)過匯編,生成目標(biāo)文件.o文件。
將各個(gè)模塊的.o文件鏈接起來生成一個(gè)可執(zhí)行程序文件。
常用編譯命令選項(xiàng)

  • 無選項(xiàng)
  • 用法:#gcc test.c

    作用:將test.c預(yù)處理、匯編、編譯并鏈接形成可執(zhí)行文件。

    這里未指定輸出文件,默認(rèn)輸出為a.out。

  • 選項(xiàng) -o
  • 用法:#gcc test.c -o test

    作用:將test.c預(yù)處理、匯編、編譯并鏈接形成可執(zhí)行文件test。

    -o選項(xiàng)用來指定輸出文件的文件名。

  • 選項(xiàng) –E 預(yù)處理指定的源文件,不進(jìn)行編譯。將C語言源文件進(jìn)行預(yù)處理,但是并不編譯該程序。對(duì)于一般的預(yù)處理問題,可以使用這個(gè)選項(xiàng)進(jìn)行查看,例如,宏的展開問題、文件的包含問題等。
  • 用法:#gcc -E test.c -o test.i

    作用:將test.c預(yù)處理輸出test.i文件。

  • 選項(xiàng) –S 將C語言源文件編譯為匯編語言,但是并不匯編該程序。
  • 用法:#gcc -S test.i

    作用:將預(yù)處理輸出文件test.i匯編成test.s文件。

  • 選項(xiàng) –c 編譯、匯編指定的源文件,但是不進(jìn)行鏈接
  • 用法:#gcc -c test.s

    作用:將匯編輸出文件test.s編譯輸出test.o文件。

  • 選項(xiàng) -o
  • 用法:#gcc test.o -o test

    作用:將編譯輸出文件test.o鏈接成最終可執(zhí)行文件test。

  • 選項(xiàng)-O
  • 用法:#gcc -O1 test.c -o test

    作用:使用編譯優(yōu)化級(jí)別1編譯程序。級(jí)別為1~3,級(jí)別越大優(yōu)化效果越好,但編譯時(shí)間越長。

  • 選項(xiàng)-I directory
  • 用法:指定 include 包含文件的搜索目錄

    9 選項(xiàng)-g 生成調(diào)試信息,該程序可以被調(diào)試器調(diào)試

  • 選項(xiàng) –L directory 指定庫文件目錄
  • 多源文件的編譯方法
    如果有多個(gè)源文件,基本上有兩種編譯方法:

    [假設(shè)有兩個(gè)源文件為test.c和testfun.c]

  • 多個(gè)文件一起編譯
  • 用法:#gcc testfun.c test.c -o test

    作用:將testfun.c和test.c分別編譯后鏈接成test可執(zhí)行文件。

  • 分別編譯各個(gè)源文件,之后對(duì)編譯后輸出的目標(biāo)文件鏈接。
  • 用法:

    #gcc -c testfun.c //將testfun.c編譯成testfun.o

    #gcc -c test.c //將test.c編譯成test.o

    #gcc -o testfun.o test.o -o test //將testfun.o和test.o鏈接成test

    以上兩種方法相比較,第一中方法編譯時(shí)需要所有文件重新編譯,而第二種方法可以只重新編譯修改的文件,未修改的文件不用重新編譯。

  • 庫文件連接
  • 開發(fā)軟件時(shí),完全不使用第三方函數(shù)庫的情況是比較少見的,通常來講都需要借助許多函數(shù)庫的支持才能夠完成相應(yīng)的功能。從程序員的角度看,函數(shù)庫實(shí)際上就是一些頭文件(.h)和庫文件(so、或lib、dll)的集合。。雖然Linux下的大多數(shù)函數(shù)都默認(rèn)將頭文件放到/usr/include/目錄下,而庫文件則放到/usr/lib/目錄下;Windows所使用的庫文件主要放在Visual Stido的目錄下的include和lib,以及系統(tǒng)文件夾下。但也有的時(shí)候,我們要用的庫不再這些目錄下,所以GCC在編譯時(shí)必須用自己的辦法來查找所需要的頭文件和庫文件。

    例如我們的程序test.c是在linux上使用c連接mysql,這個(gè)時(shí)候我們需要去mysql官網(wǎng)下載MySQL Connectors的C庫,下載下來解壓之后,有一個(gè)include文件夾,里面包含mysql connectors的頭文件,還有一個(gè)lib文件夾,里面包含二進(jìn)制so文件libmysqlclient.so

    其中inclulde文件夾的路徑是/usr/dev/mysql/include,lib文件夾是/usr/dev/mysql/lib

    3.1編譯成可執(zhí)行文件

    首先我們要進(jìn)行編譯test.c為目標(biāo)文件,這個(gè)時(shí)候需要執(zhí)行

    gcc –c –I /usr/dev/mysql/include test.c –o test.o

    3.2鏈接

    最后我們把所有目標(biāo)文件鏈接成可執(zhí)行文件:

    gcc –L /usr/dev/mysql/lib –lmysqlclient test.o –o test

    Linux下的庫文件分為兩大類分別是動(dòng)態(tài)鏈接庫(通常以.so結(jié)尾)和靜態(tài)鏈接庫(通常以.a結(jié)尾),二者的區(qū)別僅在于程序執(zhí)行時(shí)所需的代碼是在運(yùn)行時(shí)動(dòng)態(tài)加載的,還是在編譯時(shí)靜態(tài)加載的。

    3.3強(qiáng)制鏈接時(shí)使用靜態(tài)鏈接庫

    默認(rèn)情況下, GCC在鏈接時(shí)優(yōu)先使用動(dòng)態(tài)鏈接庫,只有當(dāng)動(dòng)態(tài)鏈接庫不存在時(shí)才考慮使用靜態(tài)鏈接庫,如果需要的話可以在編譯時(shí)加上-static選項(xiàng),強(qiáng)制使用靜態(tài)鏈接庫。

    在/usr/dev/mysql/lib目錄下有鏈接時(shí)所需要的庫文件libmysqlclient.so和libmysqlclient.a,為了讓GCC在鏈接時(shí)只用到靜態(tài)鏈接庫,可以使用下面的命令:

    gcc –L /usr/dev/mysql/lib –static –lmysqlclient test.o –o test

    靜態(tài)庫鏈接時(shí)搜索路徑順序:

  • ld會(huì)去找GCC命令中的參數(shù)-L

  • 再找gcc的環(huán)境變量LIBRARY_PATH

  • 再找內(nèi)定目錄 /lib /usr/lib /usr/local/lib 這是當(dāng)初compile gcc時(shí)寫在程序內(nèi)的

  • 動(dòng)態(tài)鏈接時(shí)、執(zhí)行時(shí)搜索路徑順序:

  • 編譯目標(biāo)代碼時(shí)指定的動(dòng)態(tài)庫搜索路徑

  • 環(huán)境變量LD_LIBRARY_PATH指定的動(dòng)態(tài)庫搜索路徑

  • 配置文件/etc/ld.so.conf中指定的動(dòng)態(tài)庫搜索路徑

  • 默認(rèn)的動(dòng)態(tài)庫搜索路徑/lib

  • 默認(rèn)的動(dòng)態(tài)庫搜索路徑/usr/lib

  • 有關(guān)環(huán)境變量:

    LIBRARY_PATH環(huán)境變量:指定程序靜態(tài)鏈接庫文件搜索路徑

    LD_LIBRARY_PATH環(huán)境變量:指定程序動(dòng)態(tài)鏈接庫文件搜索路徑

    總結(jié)

    以上是生活随笔為你收集整理的gcc编译c文件 python.h 未找到的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。