編譯a文件
A. java先編譯一個文件A,然後再編譯一個文件B讀取文件A
我英語不太好,但上面B程序只要你用一圈星號把Carly的標語裝飾一下,不要你用B去調用A啊,
B讀取文件A的內容想實現用反射也挺簡單的
B. 編譯minix操作系統時,總有提示沒有找到後綴名為.a的文件,.a文件是什麼文件怎麼生成
.a文件是.o文件的集合,可用ar -tv命令查看裡麵包含的.o文件。
ADS編譯選項小技巧
2005-12-01 12:50
今天收到了中文之星發來的輸入法文件,發現生成的庫文件是.a後綴的,因為習慣使用.lib形式的後綴,又擔心直接修改後綴名稱會出問題,所以想研究一下怎麼把.a修改成.lib文件。
命令行模式下輸入armar查詢參數,發現了幾個比較需要的參數:
-x Extract members in <file_list> placing in files of the same name.
-t Print table of contents of archive.
-create Force creation of a new archive.
於是,輸入armar -t csk2.a查看了庫文件的組成文件列表,然後輸入armar -x csk2.a解壓出全部.o文件,最後armar -create csk2.lib *.o,成功生成csk2.lib。比較csk2.a和csk2.lib發現有一個數字不一樣,估計是生成時間不一樣,現在想想或許直接改後綴就可以了。雖然走了彎路,但是通過查詢編譯參數還發現了不少好用的功能,這里就不列舉了附上參數表,自己慢慢研究。
-r Insert files in <file_list>, replace existing members of the same name.
-d Delete the members in <file_list>.
-x Extract members in <file_list> placing in files of the same name.
-m Move files in <file_list>.
-p Print files to stdout.
-a pos Insert/move files after file named <pos>.
-b pos Insert/move files before file named <pos>.
-u Update older files only, used with -r.
-n Do not add a symbol table to an object archive.
-s Force regeneration of archive symbol table.
-t Print table of contents of archive.
-zs Show the symbol table.
-zt Summarize the archive contents (sizes + entries).
-c Suppress warning when a new archive is created.
-C Do not overwrite existing files when extracting.
-T Truncate file names to system maximum length.
-v Give verbose output.
-create Force creation of a new archive.
-via file Take additional arguments from via file.
-sizes List the size of each member and the library total.
-entries List sections containing ENTRY points.
-vsn Print the current Armar Version.
-help Print this message.
Examples:-
armar -r mylib.a obj1 obj2 obj3...
armar -x mylib.a ?sort*
armar -d mylib.a hash.o
armar -tv ansilib.a
C. 編譯時怎麼使用.a文件
編譯時怎麼使用.a文件
for example:(1)動態庫的編譯
這里有一個頭文件:so_test.h,三個.c文件:test_a.c、test_b.c、test_c.c,我們將這幾個文件編譯成一個動態庫:libtest.so。
命令:$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so
D. 怎麼編譯MT7620A程序包
其實解決方案很簡單,既然編譯器不能根據包名找到A類,那我們就把A類的絕對路徑直接告訴編譯器不就可以了嗎?事實上就是這么做的,具體操作為:在命令行模式下進入F:\test目錄,然後運行編譯命令javacF:\test\e\main\A.java,可以成功編譯生成A.class文件。(注意:如果不在此目錄下執行編譯命令的話,就要將f:\test加入到當前的classpath中為make工具提供B.java的位置信息)接下來就要運行這個class文件了,運行仍然在F:\test目錄下執行(注意:如果不在此目錄下執行運行命令的話,一定要把F:\test加入到當前的classpath中),命令為:javae.main.A,很顯然,這里就是根據輸入的package名稱找到對應的class文件,並檢驗找到的class文件的與輸入的包名是否匹配(例如:如果你在e目錄下新建一個test目錄,將A.class文件拷貝進去,輸入javae.test.A的話還是會報錯:找不到class文件)。可能有人要問:為什麼運行的時候又可以根據包名找到相應的class文件呢?因為運行的時候默認是從當前路徑開始搜索的,如果當前路徑找不到的話,就在系統的classpath中找,如果再找不到就會報錯。由上面的分析我們可以得出:(1)在命令行模式下編譯java文件時,如果cmd不在該java文件所在的目錄下,就要直接指定文件的絕對路徑(javacF:\test\e\main\A.java),如果在java文件所在的目錄下,可以不指定路徑,但是要設置classpath讓編譯器的make工具找到其他import的類(2)運行的時候要指出包路徑(javae.main.A),並且一定要在class文件名前帶上完整的包名(e.main.A),而且該包所在的文件夾(即e所在的文件夾)一定要在classpath中,這樣才能找到對應的class文件(在包所在的文件夾目錄下運行cmd程序或者將該目錄加入到classpath中均可)。(3)在命令行模式下非直接編譯的java,編譯器使用make工具根據java文件中的import信息間接找到引用的java文件,所以一定要注意文件的配置,以及相互之間的位置關系。當然也可以通過設置classpath提供給make工具,但是如果文件比較多而且相互之間的引用關系比較復雜的話會比較麻煩。(4)classpath只能供make工具以及運行class文件時使用,在直接編譯的時候不使用classpath信息,必須在要編譯的java文件前帶上其絕對的路徑名。
E. 如何在XCode中使用gcc編譯生成的.a庫文件
1. 把你的.a文件添加到^projectName下的任意一個組里(例如默認的Classes組)。
2. 找到Target > ^targetName,在這個^targetName下會有Link Binary With Libraries。把你已經在某組里的那個.a文件拖到Link Binary With Libraries這個Build Phase中。(也可能同時也要添加到某個Copy的Build Phase中...)
3. 提供一個可用的頭文件。
4. Build and Go.
封裝的話,標準的Cocoa做法是用Cocoa Framework。也就是在新建工程的時候,選擇Cocoa Framework。
F. .a文件.o文件和.so文件有什麼區別
o: 編譯的目標文件 a: 靜態庫,其實就是把若干o文件打了個包 so: 動態鏈接庫(共享庫) lo: 使用libtool編譯出的目標文件,其實就是在o文件中添加了一些信息 la: 使用libtool編譯出的庫文件,其實是個文本文件,記錄同名動態庫和靜態庫的相關信息。
我們通常把一些公用函數製作成函數庫,供其它程序使用,函數庫分為靜態庫和動態庫兩種,靜態庫在程序編譯時會被連接到目標代碼中,程序運行時將不再需要該靜態庫,動態庫在程序編譯時並不會被連接到目標代碼中,而是在程序運行是才被載入,因此在程序運行時還需要動態庫存在,在創建函數庫前,我們先來准備舉例用的源程序,並將函數庫的源程序編譯成.o文件。
G. Android編譯出.a文件有什麼用,為什麼不直接編譯成.so
.a是靜態鏈接庫啊。
H. .a文件是什麼VC6.0編譯出現錯誤,怎麼在編譯的時候把.a文件也加進去
.a文件是GCC編譯器用的,VC編譯器無法使用。
你要換GCC編譯器的話集成開發環境也不能用VC,要換。
Windows下也是可以用GCC的,不過你要確定你拿到的.a不是Linux下生成的
然後這裡面名堂就多了我一下子也講不清於是只能讓你自己慢慢去找這方面的資料了。
I. a 是什麼文件如何使用 a文件
.a文件是編譯過程中生成的,每個package都會生成對應的.a文件,Go在編譯的時候先判斷package的源碼是否有改動,如果沒有的話,就不再重新編譯.a文件,這樣可以加快速度。
J. a的用gcc編譯
1、用gcc的-c選項生成.o文件
如 gcc -c test1.c test2.c test3.c 編譯後會生成test1.o test2.o test3.o三個目標文件。
2、然後用ar命令生成.a文件
如 ar cr libtest.a test1.o test2.o test3.o