共享庫編譯
⑴ 關於linux動態鏈接共享庫(如何解決應用程序
共享庫是一個目標模塊(.so),在運行時,可以載入到任意的存儲器地址,並和一個在存儲器中程序鏈接起來。這個過程稱為動態鏈接,是由一個叫做動態鏈接器的程序來執行的。載入共享庫有兩種方式。
在應用程序執行之前,即應用程序被載入時,動態鏈接器載入和鏈接共享庫。
在應用程序執行時,要求動態鏈接器載入和鏈接任意共享庫,而無需在編譯時鏈接那些庫到應用中。
⑵ 為什麼要用PIC編譯Linux共享庫
不是共享庫,而是動態庫 (dynamic library)。 動態庫的意思是庫內的地址是在load時刻才由loader動態決定的,所以和靜態庫不同,編譯出來的動態庫代碼必須是 「位置無關代碼」 (PIC: position-independant code),所以編譯的時候必須加上 -fPIC 選項。
⑶ Android中靜態庫和共享庫的區別
簡單來講:
靜態庫是在連接階段直接拷貝到代碼中使用的,而共享庫是由載入器載入到內存,在運行時使用的。
編譯出來的靜態庫(這里指jar包)里每個java文件對應的class文件都單獨存在,可以直接導入Eclipse等IDE使用
而編譯出來的共享庫(jar包),內部是Android位元組碼Dex格式的文件,一般無法導入Eclipse等IDE使用。Android.mk中由BUILD_JAVA_LIBRARY指定生成共享BUILD_STATIC_JAVA_LIBRARY指定生成靜態庫。
⑷ 編譯GNU/Linux共享庫,為什麼要用PIC編譯
不是共享庫,而是動態庫 (dynamic library)。 動態庫的意思是庫內的地址是在load時刻才由loader動態決定的,所以和靜態庫不同,編譯出來的動態庫代碼必須是 「位置無關代碼」 (PIC: position-independant code)
⑸ Mac下編譯Lua引用的C共享庫失敗, 求解
1.沒有創建Lua_State
2.打開庫文件
⑹ gcc編譯共享庫怎麼不報錯
這只能說明一個問題,你依賴的庫本身有問題,沒有把它的依賴都加進去,也就是你例子中的①libb.so依賴liba.so;,你應該在生成libb.so的時候,把對liba.so的依賴加進去,這樣應該就沒有問題了。
⑺ 在一個版本的linux下編譯的共享庫so文件,在其它linux版本下可以正常使用嗎
建議先核對下兩個系統的GCC版本。
⑻ Linux 下Makefile怎麼寫,編譯包含 一個共享庫文件,一個靜態庫文件,四個.c文件。
看看偉東山裸機的源代碼就能知道了, 調用的庫文件只需放在同一目錄下就可以
⑼ Linux下的動態共享鏈接庫的優點有哪些
動態共享庫有以下的優點,使它在Linux開發中比靜態鏈接庫更加的流行。
(1) 節省內存
動態共享庫無論被多少應用程序使用,在內存中都只存在一個動態共享庫的副本,而不像靜態鏈接庫那樣,一個應用程序在運行中用到靜態鏈
接庫,就會有多個靜態鏈接庫的副本 。
(2) 節省磁碟
這和節省內存有點相似,同樣這也是由於靜態鏈接庫存在多個靜態鏈接庫的副本造成的。同樣的應用程序,使用動態共享庫編譯出的版本通常比使用靜態鏈接庫編譯出來的版本要小。因此,在嵌入式系統開發中使用動態共享庫也不節省空間,提供了一種很好的選擇。
(3) 便於軟體修復與升級
由於動態共享是獨立於應用程序存在的,因此,用新版本的動態共享庫替舊版本的工作將變得非常容易。如果使用靜態鏈接庫的話,假設在一個靜態庫中發現了一個
ug,那麼要修正這個
ug的話,就要重新編譯所有使用這個靜態庫的應用程序,使用這個靜態庫的應用程序有很多的話,可以想像工作量是有多大。
(4) 提高性能
與採用靜態鏈接庫臃腫的應用程序相比,採用動態共享庫的應用程序明顯「苗條」得多,這樣當操作系統載入應用程序時,是需要把應用程序
復制到內存中的,這樣的「苗條」的動態鏈接庫也就有了很大的優勢,同時提高了程序的性能。
當然,動態鏈接庫在有上述這些優勢的同時,也有以下的幾個劣勢。復雜性,兼容性,調試困難。但是它在Linux上使用頻率上仍然比靜態鏈接庫要高的多。應用的更加廣泛。
⑽ 怎樣編譯載入共享庫的可執行程序
1.下載FatJar插件2.安裝之後,右鍵選擇項目時,會出現BuildFatJar,選擇該方法,然後按照向導即可一步步導出可執行jar文件。如果有外部的jar包,比如說sqljdbc.jar,則把所有要使用的第三方的jar包都復制到{Java_home}\jre\lib\ext目錄下。(必須重新啟動Eclipse才能載入這些jar包)而象SWT項目這樣所使用的jar包,則不需要這么設置,直接在向導中選擇所需要的jar包即可。3.然後就可以在導出目錄中運行這個可執行jar包,但如果是SWT項目,則必須在包含該可執行jar包的目錄下有一個swt-win32-3235.dll之類的文件。4.有了可執行的jar文件,然後可以使用exe4j.exe之類的jar轉exe軟體,如果使用exe4j.exe則當調用到sqljdbc.jar之類的外部包時,則必須將sqljdbc.jar也一並導入。安裝向導就可以生成exe文件了,如果是SWT項目則也必須在同目錄下有swt-win32-3235.dll之類的文件。