編譯程序位置
linux系統編神差孫譯C++程序時頭⽂件和庫⽂件搜索路徑
C++編譯時,教科書中寫道:#include 「headfile.h」優先在當前⽬錄查找頭⽂件;#include < headfile.h>從系統默認路徑查找頭⽂件。先
前以為系統默認路徑是環境變數$PATH指定的路徑,在系統上⼀查,傻了眼:
-bash-3.2$ echo$PATH
/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/usr/java/j2re1.4.0/bin:/usr/atria/bin:/ccase/bin:/home/devcomp
全是bin⽬錄,$PATH是運⾏可執⾏⽂件時的搜索路徑,與include頭⽂件的搜索路徑⽆關,可能不少⼈犯了我這樣的錯誤。
頭⽂件:
1. #include「headfile.h」
搜索順序為:
①先搜索當前⽬錄
②然後搜索-I指定的⽬錄
③再搜索gcc的環境變數CPLUS_INCLUDE_PATH(C程序使⽤的是C_INCLUDE_PATH)
④最後搜索gcc的內定⽬錄
/usr/include
/usr/local/include
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include
各⽬錄存在相同⽂件時,先找到哪個使⽤哪個。
2. #include<headfile.h>
①先搜索-I指定的⽬錄
②然後搜索gcc的環境變數CPLUS_INCLUDE_PATH
③最後搜索gcc的內定⽬錄
/usr/include
/usr/local/include
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include
與上⾯的相同,各⽬錄存在相同⽂件時,先找到哪個使⽤哪游鏈個。這⾥要注意,#include<>⽅式不會搜索當前⽬錄!
這⾥要說下include的內定⽬錄,它不是由$PATH環境變數指定的,⽽是由g++的配置prefix指定的(知道它在安裝g++時可以指定,不知安
裝後如何修改的,可能是修改配置⽂件,需要時再研究下):
-bash-3.2$ g++ -v
Using built-inspecs.
Target:x86_64-redhat-linux
Configured with:../configure --prefix=/usr --mandir=/usr/share/man--infodir=/usr/share/info --enable-shared --enable-threads=posix--enable-checking=release --with-system-zlib --enable-__cxa_atexit--disable-libunwind-exceptions --enable-libgcj-multifile--enable-languages=c,c++,objc,obj-c++,java,fortran,ada--enable-java-awt=gtk --disable-dssi --enable-plugin--with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre--with-cpu=generic --host=x86_64-redhat-linux
Thread model:posix
gcc version 4.1.2 20080704(Red Hat 4.1.2-46)
在安裝g++時,指定了prefix,那麼內定搜索⽬錄就是:
Prefix/include
Prefix/local/include
Prefix/lib/gcc/--host/--version/include
編譯時可以通過-nostdinc++選項屏蔽對內定⽬錄搜索頭⽂件。
庫⽂件:
編譯的時候:
①gcc會去找-L
②再找gcc的環境變數LIBRARY_PATH
③再找內定⽬錄/lib /usr/lib/usr/local/lib 這是當初compilegcc時寫在程序內的(不可配置的?)
運⾏時動態庫的搜索路徑:
動態庫的搜索路徑搜索的先後順序是:
①編譯⽬標代碼時指定的動態庫搜索路徑(慶跡這是通過gcc 的參數"-Wl,-rpath,"指定。當指定多個動態庫搜索路徑時,路徑之間⽤冒號":"分隔)
②環境變數LD_LIBRARY_PATH指定的動態庫搜索路徑(當通過該環境變數指定多個動態庫搜索路徑時,路徑之間⽤冒號":"分隔)
③配置⽂件/etc/ld.so.conf中指定的動態庫搜索路徑;
④默認的動態庫搜索路徑/lib;
⑤默認的動態庫搜索路徑/usr/lib。
(應注意動態庫搜尋路徑並不包括當前⽂件夾,所以當即使可執⾏⽂件和其所需的so⽂件在同⼀⽂件夾,也會出現找不到so的問題,類同#include<header_file>不搜索當前⽬錄)
¥
5
網路文庫VIP限時優惠現在開通,立享6億+VIP內容
立即獲取
linux系統編譯C++程序時頭文件和庫文件搜索路徑
linux系統編譯C++程序時頭⽂件和庫⽂件搜索路徑
C++編譯時,教科書中寫道:#include 「headfile.h」優先在當前⽬錄查找頭⽂件;#include < headfile.h>從系統默認路徑查找頭⽂件。先
前以為系統默認路徑是環境變數$PATH指定的路徑,在系統上⼀查,傻了眼:
-bash-3.2$ echo$PATH
/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/X11R6/bin:/usr/java/j2re1.4.0/bin:/usr/atria/bin:/ccase/bin:/home/devcomp
第 1 頁
全是bin⽬錄,$PATH是運⾏可執⾏⽂件時的搜索路徑,與include頭⽂件的搜索路徑⽆關,可能不少⼈犯了我這樣的錯誤。
頭⽂件:
1. #include「headfile.h」
搜索順序為:
①先搜索當前⽬錄
②然後搜索-I指定的⽬錄
③再搜索gcc的環境變數CPLUS_INCLUDE_PATH(C程序使⽤的是C_INCLUDE_PATH)
展開全文
限免
導長圖
轉存到網盤
發送至微信
下載文檔
北京網路網訊科技有限公司 版本號8.0.70
② 在編譯Java程序時,用於指定生成.class文件位置的選項是()。
【答案】:B
javac.exe是Java編譯器,能將源程序代碼編譯成位元組碼,以.class擴展名存入Java工作目錄中。它的命令清團格式為:javac[選項]文件名陸笑。其中[選項]包括以下幾個:
-g輸出文件中加行號以及局部變數信息,為調試程序時用。
-o對類文件進行優化編譯。
-nowarn關閉警告信息,只顯示錯誤信息。
-verbose顯示早正含源代碼文件和位元組碼文件的相關信息。
-d<目錄>指定存放生成的類(.class)文件的位置根據上述介紹可知,在編譯Java程序時,可以通過選項-d來指定生成的.class文件的位置。因此,本題的正確答案是B。
③ 編譯程序安裝在計算機的哪裡
舉例來說:
當你使用C編寫代碼,使用編譯器編譯後,即生成了可執行程序。當可執行程序被操作系統的載入器載入到內存、並准備好必要的數據後從代碼段開始執行,這時的代碼段代碼已經是機器碼了,無須編譯。當然,可執行程序里的所有數據並非都是代碼,有些是寫給操作系統看的,以使操作系統能為程序的執行做好必要准備。
至於說DOS命令,分為外部命令和內部命令。外部命令和一般的可執行程序沒有區別,他以可執行程序文件的形式存在。沒有這個文件就不能運行這個命令;內部命令是固化在操作系統中的代碼模塊,一般以DLL文件的形式存在。至於哪個DLL文件包含特定的內部命令的代碼,就必須查資料了。
CPU所支持的指令集,是由CPU的物理設計決定的,並不是說有什麼指令存放在CPU上。
當然,如果是解釋性的語言。那麼,可執行程序是一邊被解釋(編譯)一邊被執行的。所以他的速度要慢些。並且必須安裝對應的編譯(解釋)程序。比如JAVA。
④ 當一個MFC程序編譯成功後,軟體保存在哪
在你寫的程序文件夾裡面有個Debug文件夾。。。在那裡藏著呢
⑤ 程序編譯時地址如何分配
如果是具備操作系統的情況下,C語言,linux為例,程序會根據系統配置和elf格式自動載入進入內存。
起始地址是可執行文件的base_of_image欄位指定的值,前提是不開啟PIE保護。
而匯編器內部定址只是一個偏移地址。
所以最終,一條指令的位置 = 起始地址+ 他在模塊的偏移。
如果不具備操作系統,純粹的嵌入式環境下,地址是自己指定的。
⑥ 怎麼樣才能找到自己電腦的編譯軟體位置
編譯器通常都有固定的名字,比如fpc.exe,gcc.exe,g++.exe,javac.exe,具體要看你用何種語言何者舉種編譯器。如晌敏果實在太偏門的可以利用主動防禦軟體的日宴嫌枝志功能追蹤。(如果你用的是linux當我沒說…)
⑦ VC 編譯器放在哪個文件夾
這要看你的VC安裝在哪個文件夾,例如在」D:\Program
Files\Microsoft
Visual
Studio
9.0「
則VC編譯器就在"D:\Program
Files\Microsoft
Visual
Studio
9.0\VC\Bin"文件夾下。
即在VC安裝目錄的"VC\Bin"文件夾下。
⑧ Linux編譯C語言,源程序文件放在什麼路徑
改名:mv hello hello.c
編譯:首先cd到你源文件的那個目錄下,這樣省去了指定絕對路徑的麻煩,比如cd到桌面,然後:gcc hello.c -o hello
運行:./hello
⑨ microsoft visual c++里的編譯在哪裡
在生成菜單下的最後一個子菜單編譯(這個是單獨編譯的)。
在生成菜單下的的 生產解決方案 或者 生產 ,就是編譯加組建。在VC中編譯程序的過程:
1.打開VC軟體。
2.新建C++程序文件。
3.在新建面板中,選擇「文件」選項卡,選擇「C++ Source File」選項,同時輸入該文件的名稱。
4.寫好程序後,單擊工具欄的「Compile」按鈕,進行編譯。
5.編譯完成,計算機提示我們代碼正確,並創建了工程文件。
6.單擊工具欄的「Build」按鈕,進行連接。
7.計算機提示我們連接成功,並創建了二進制代碼。
8.單擊工具欄的「BuildExecute」按鈕,計算機開始運行代碼。
9.程序運行完畢,計算機輸出了正確的結果。
⑩ 怎麼知道電腦中c++的編譯器按在哪了
如果這個軟體桌面上有快捷方式的話,就右擊快捷方式,點擊屬性。
在屬性菜單點擊快捷方式。