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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

adb: createprocessw failed: 系统找不到指定的路径_gcc编译过程、gcc命令参数、静态库和动态库搜索路径...

發布時間:2023/12/19 windows 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 adb: createprocessw failed: 系统找不到指定的路径_gcc编译过程、gcc命令参数、静态库和动态库搜索路径... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、gcc編譯過程

gcc -E hello.c -o hello.s //預處理
gcc -S hello.s -o hello.i //編譯
gcc -c hello.i -o hello.o //匯編
gcc hello.o -o hello //鏈接

1)預處理,C編譯器對各種預處理命令進行處理,包括文件包含、宏定義的擴展、條件編譯的選擇等;

2)編譯,將預處理得到的源代碼文件,經過“翻譯轉換”,產生機器程序,得到機器語言的匯編文件;

3)匯編,將匯編代碼翻譯成機器碼,但是還不能運行;

4)鏈接,處理可重定向文件,把各種符號引用和符號定義轉換成為可執行文件中的合適信息,通常是虛擬地址。

二、gcc常用命令參數

1、gdb調試 -g

gcc test.c -o test -g //生成的test可以使用gdb命令進行調試

2、指定所使用到的函數庫 -l(小寫l);指定函數庫所在的文件夾 -L;指定頭文件所在的文件夾 -I(大寫i);

gcc test.c -L/path/lib -lxxx -I/path/include //使用順序不分先后

3、編譯優化

gcc -O test.c //編譯器對代碼自動優化編譯,默認不優化
gcc -o1 test.c //設置優化級別為1;一般選擇2,3會有很多bug風險

4、設置警告為錯誤

gcc -Werror test.c -o test

5、將所有警告信息全開

gcc -Wall test.c

6、編譯時設置宏

gcc test.c -o test -DTRUE //相等于在代碼第一行定義 #define TRUE 1
gcc test.c -o test -Dmacro=string //代碼第一行定義 #define macro string

7、gcc編譯標準

gcc test.c -o test //默認gcc test.c -o test -std=gun89

GCC -std編譯標準一覽表?c.biancheng.net

三、靜態庫和動態庫

一、靜態鏈接庫搜索路徑順序:

  • ld會去找gcc命令中的參數-L
  • 環境變量LIBRARY_PATH
  • 默認路徑/lib、/usr/lib、/usr/local/lib
  • LIBRARY_PATH和LD_LIBRARY_PATH區別與使用:

    • 開發時,設置LIBRARY_PATH,以便gcc能夠找到編譯時需要的動態鏈接庫。
    • 發布時,設置LD_LIBRARY_PATH,以便程序加載運行時能夠自動找到需要的動態鏈接庫。

    二、動態鏈接時、執行時搜索路徑順序:

    1)ld.so動態共享庫搜索順序

  • ELF可執行文件中動態段DT_PATH指定;gcc加入連接參數“-Wl,-rpath”指定動態庫搜索路徑,多個路徑之間用冒號分隔;
  • 環境變量LD_LIBRARY_PATH指定路徑;
  • /etc/ld.so.cache中緩存的動態庫路徑。通過配置文件/etc/ld.so.conf增刪路徑(修改后需要運行ldconfig命令);
  • /lib/
  • /usr/lib/
  • 2)與動態庫鏈接相關的命令

    • ld是gcc的鏈接程序;
    • ldd是查看可執行文件中所依賴的庫,eg:ldd a.out;
    • ldconfig用來更新/etc/ld.so.conf文件;
    • nm查看.so庫中的函數名字,標記是T的就是動態庫里面生成的名字;eg:nm -C test|grep static //在程序文本段查找static

    3)動態庫搜索路徑順序

  • 編譯目標代碼時指定的動態庫搜索路徑;
  • 環境變量LD_LIBRARY_PATH指定的動態庫搜索路徑;
  • 配置文件/etc/ld.so.conf中指定的動態庫搜索路徑;/etc/ld/so.conf第一行有個引用命令:include ld.so.conf.d/*.conf;因此最優雅的方式是在ls.so.conf.d目錄下創建一個自己的程序依賴的配置文件,配置文件內容為程序依賴的動態庫路徑,一個路徑一行;最后ldconfig更新配置文件;
  • 默認動態庫搜索路徑/lib/
  • 默認動態庫搜索路徑/usr/lib/
  • 4)動態庫路徑設置方法

  • LD_LIBRARY_PATH環境變量指定,也可以放到.bashrv中固化下來,可也以放到當前用戶的.bashrc只對當前用戶有效;
  • 如果啟用ls.so.cache的話,系統會在/etc/ld.so.cache中存儲所有可引用的動態鏈接庫。這個文件內容可以通過/etc/ls.so.conf來指定;這是比較固定的機制,對全局用戶有效;設置后需要root調用ldconfig刷新;
  • 默認的標準庫路徑,如果是64位,還包括/lib64/、/usr/lib64/
  • 如果只想對某個特定程序起作用,可以在編譯時指定搜索路徑。gcc的 -Wl和-rpath參數
  • /usr/local/lib/和/usr/local/lib64/不在標準路徑之列
  • Linux下動態鏈接庫加載路徑及搜索路徑問題_Linux_腳本之家?www.jb51.net

    ldconfig作用是在ld.so.conf和默認路徑(/lib/、/usr/lib/)中所列出目錄下搜索動態庫;

    編譯時,ld鏈接器指定鏈接什么庫,編譯程序的最后一步是運行ld;

    程序運行時,ld.so動態連接器,根據指定的路徑加載庫;

    緩存文件/etc/ld.so.cahche,保存已經排好序的動態鏈接庫名字列表;

    總結

    以上是生活随笔為你收集整理的adb: createprocessw failed: 系统找不到指定的路径_gcc编译过程、gcc命令参数、静态库和动态库搜索路径...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。