㈠ 怎樣將自己做的動態鏈接庫「靜態」編譯到可執行文件里
舉例文件:add.c
gcc -fPIC -c add.c /生成.o文件
gcc -shared add.o -o libmath.so /載入add.o到math動態庫
gcc test.c -L. -Lmath /test.c 為主程序
另外;配置動態庫載入器環境變數:
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
㈡ 打包android的時候怎麼引入一些靜態庫
方法1 :
人為建立上面的文件夾並將靜態庫拷入;
方法2 :
就是通過編譯配置來做上面的動作。具體如下:
1. 將動態庫的編譯部分和靜態庫的編譯部分分開;
2. 在工作目錄下建立一個lib文件夾(必須是這個名字),將第三方的靜態庫拷貝進去,並且增加一個編譯配置文件Android.mk,具體內容如下:
Android <wbr>: <wbr>編譯動態庫時如何引入靜態庫
這個編譯配置文件就是要在obj下生成中間文件,供其他地方使用。
文件列表如下:
Android <wbr>: <wbr>編譯動態庫時如何引入靜態庫
3. 在工作目錄下建立一個文件夾,並且將生成動態庫的相關文件全部拷貝進去。這里我們起的名字是src,當然也可以起其他名字。Android.mk內容如下:
Android <wbr>: <wbr>編譯動態庫時如何引入靜態庫
這里只要直接引入第三方庫就可以了。
文件列表如下:
Android <wbr>: <wbr>編譯動態庫時如何引入靜態庫
third_lib.h是靜態庫的頭文件,test.cpp很簡單,就是一個函數裡面順序調了一下靜態庫里開放的函數,內容如下:
Android <wbr>: <wbr>編譯動態庫時如何引入靜態庫
3. 工作目錄下增加一個編譯配置文件Android.mk,作用就是查找工作目錄下所有的子目錄中的Android.mk來編譯。Android.mk的內容如下:
Android <wbr>: <wbr>編譯動態庫時如何引入靜態庫
好,工作都做完了,下面進入工作目錄mm -B 試一下,可以順利編譯成功。
㈢ 如何在android studio中用JNI調用靜態庫
android ndk開發經常遇到了動態庫的問題,本文主要介紹: ① 動態鏈接庫的生成; ② 在Java和C混合編程的情況下如何調用第三方動態鏈接庫; ③ 使用dlopen程序運行時直接調用; ④ 純c的方式開發調用; 本文重點推薦②和④,第③中太麻煩每個函數都需要
㈣ Android NDK編譯如何強制使用libc++.a的靜態鏈接庫
在編譯命令行中,將使用的靜態庫文件放在源文件後面就可以了。比如: gcc -L/usr/lib myprop.c libtest.a libX11.a libpthread.a -o myprop 其中-L/usr/lib指定庫文件的查找路徑,編譯器默認在當前目錄下先查找指定的庫文件。
㈤ 動態鏈接,靜態鏈接 動態編譯,靜態編譯 動態鏈接庫,靜態鏈接庫 這些兩兩間的區別是什麼呢
有點兒亂……,分數少簡單扼要的說說吧。
————————————
首先,傳統的編譯,也就是靜態編譯是把 源文件 翻譯成目標文件,這個是一次性過程,也就是你所謂的靜態編譯。
後來的Java和.NET等語言,首先編譯成中間形式,然後運行過程中根據需要編譯成本地代碼(注意這個過程不是一次性的,下次運行重新編譯),這個就是JIT(即時編譯)技術,從即時編譯發展出了動態編譯技術
————————————
(傳統的)編譯完成後,像C/C++、Fortran、匯編等語言,可以把多個目標文件合並到一個庫文件中,這個就是靜態庫。比如常說的庫函數printf就是libc裡面的函數。
如果有了啟動函數(main),main裡面使用了printf,就可以通過靜態鏈接技術,從libc中提取出printf所在的文件加入到可執行文件中,如果printf還需要其它函數,就繼續搜索並加入列表,直到形成一個閉包。這個就是靜態鏈接。
可是靜態鏈接有個明顯的缺點,如果每個程序都需要printf,那麼printf這個函數的代碼就會同時存在在每個程序中,這樣也太佔地方了吧。所以發明了動態連接技術,其實有兩種形式。無論哪一種,都是首先記錄下需要調用printf這個函數以及所在的動態庫,等到運行的時候再載入動態庫,從動態庫中找到真正的printf去執行。
由於,動態鏈接技術需要一些額外的信息,傳統的靜態庫是不具備的,這些額外信息主要是重復載入和卸載時所需要的一些代碼,因此需要動態鏈接庫。
㈥ android導第三方庫怎麼統一編譯版本
導入成功了,你就可以使用了,你只不過不知道怎麼使用吧!看看有沒有readme之類的說明文檔,沒說明文檔那誰知道你寫的介面怎麼用,或者去網上看看
㈦ 如何把靜態鏈接庫完全打入可執行文件中
如果dll本身是動態庫,那麼 .lib 也是動態的(裡面只有函數名,沒代碼,代碼在dll中) 不能當靜態庫連接的。
你需要讓第3方做一個為靜態連接的庫(也叫 lib, 單裡面有代碼)
還有方法就是可以把exe和dll打包成一個文件,就像有些綠色軟體一樣。
㈧ android 靜態庫 怎麼push
要有adb
小機要root
用USB線連接小機和PC,在命令行下按以下順序執行
1.adb root
2.adb remount
3.adb push 要push的.so push到小機的路徑
㈨ 安卓如何鏈接靜態庫
關於編譯靜態庫:
android.mk和xxx.cpp放在新文件夾里:
LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \xxx.cpp
LOCAL_MODULE:= libx
include $(BUILD_STATIC_LIBRARY)
生成靜態庫libx.a文件
關於鏈接靜態庫:
有兩種方法:
1、把libx.a文件放在android.mk同一目錄下,添加:
LOCAL_PREBUILT_LIBS += libx.a
2、同上,添加:
include $(CLEAR_VARS)LOCAL_MODULE := libxLOCAL_SRC_FILES := libx.ainclude $(PREBUILT_STATIC_LIBRARY)LOCAL_STATIC_LIBRARIES += libx
貌似第二種是NDK里比較常見,第一種在其他的android.mk里比較常見。
㈩ 如何在android studio中用JNI調用靜態庫a文件
androidndk開發經常遇到了動態庫的問題,本文主要介紹:①動態鏈接庫的生成;②在Java和C混合編程的情況下如何調用第三方動態鏈接庫;③使用dlopen程序運行時直接調用;④純c的方式開發調用;本文重點推薦②和④,第③中太麻煩每個函數都需要