當前位置:首頁 » 編程軟體 » dll編譯成so

dll編譯成so

發布時間: 2022-07-27 11:54:03

① 製作DLL的源文件能不能編譯成.SO文件

純C寫的話,移植到linux應該是很容易的

順利的話直接在linux下編譯就行了,不順利的話,需要把windos下的函數替換成對應的linux下的,或者自己再封裝一層

② 什麼是SO文件

so文件是Linux下的程序函數庫,即編譯好的可以供其他程序使用的代碼和數據。

③ 如何給dll庫 添加.mk文件 ndk編譯為.so

給dll庫 添加.mk文件 ndk編譯為.so不清楚

④ 怎樣把.c文件編譯成.so文件

比如有一個test.c文件,我想打包成動態庫test.so,
直接gcc
test.c
-o
test.o
-fpic
gcc
-o
test.so
test.o
-shared
使用的時候發布.so和頭文件即可。
鏈接的時候要記得丟在默認目錄或者將其所在目錄聲明到環境變數,不然有時候會提示找不到這個庫文件。

⑤ linux中把.c的文件編譯成.so

首先
gcc
-c
-fPIC
libst.c
生成
libst.o
然後
gcc
-shared
-fPIC
-o
libst.so
libst.o
生成
libst.so
動態鏈接庫
把libst.so拷貝到系統默認庫目錄下,比如
/lib,
/usr/lib

假定你有
test.c
要引用這個庫
gcc
-lst
-o
test
test.c
然後就可以了
假如不能把libst.so拷貝到默認庫目錄下,比方說放在了
/home/aaa/lib

那麼就用這樣的語句來編譯test.c
gcc
-L/home/aaa/lib
-lst
-Wl,-rpath=/home/aaa/lib
-o
test
test.c

⑥ 有關跨平台模塊化編程,DLL,SO文件等問題,知多知少歡迎進來~

1.確實沒什麼標准可言,dll主要就是提供代碼動態載入。所以它只需要讓載入器能夠找到正確的函數名就行了。保證鏈接過程不出錯即可。大型API要遵循一些原則,是因為函數提供給其他人應用,而且是二進制格式發布。就算是自己的dll文檔對函數的解釋也要寫清楚。以後維護升級保證dll內原始的函數原形不發生變化。沒有什麼模式需要你遵循。dll的內容也只是函數的集合而已。
2.dll分幾種,其實只是可執行文件格式而已。so文件也是一種可執行格式(ELF格式)。計算機發展到現在可執行文件格式有多種變體。鏈接器和載入器.pdf 一書對可執行文件講的比較詳細,你肯定不是編譯器和連接器的開發者。所以你不需要知道這么多。只需要知道可執行文件存放著我需要的代碼,連接器把不同的庫連接到一起,然後main函數就可以在執行過程中動態調用它們。推薦看:深入剖析Win32可移植可執行文件格式 鏈接器和載入器 兩份資料
你去搜搜可執行文件格式,可以找到一些文章。
3.其實不許要注意什麼,so性質和dll是一樣的(存放著可執行代碼,鏈接需要的信息,符號表等等。)。它們只是在不同平台下的動態鏈接庫而已。對於dll到so注意什麼???對於普通程序員沒什麼要注意的。我們只需要寫出代碼然後,使用連接器和編譯器就可以了。細節問題是編譯器和連接器載入器的實現者關心的。
4.COM即是一種可執行格式(dos時代),也是一種 「組件對象模型」。前者已經不主流了,後者不過時。com也是dll這些dll按照com規范提供固定名稱的函數(俗稱「介面」)。需要載入這些com的主程序,也遵循com規范調用這些函數。這樣兩邊就能協同工作。

⑦ 如何在windows環境下將.so編譯成.dll如果不行,在linux下的具體編譯過程是怎樣的望高手回答。。謝!

.so文件就已經是經過編譯的C程序

而.dll文件是編譯好的動態鏈接庫文件,需要用rundll32.exe來執行,或者載入shell執行。

所以.so和.dll不能互換。

在linux下面直接用gcc編譯器就能編譯。

命令格式:

gcc 文件名 C源碼文件名

例:

gcc 123.so 123.c

===========================================
.dll的就是已經編譯成功的了,不能再被編譯。
就像生孩子,已經是女孩了,你還能捅回去再換
個男孩出來?
===========================================

⑧ C++怎麼載入已經寫成.so(.dll)的類

1.靜態調用dll
在新文件yyy.cpp里加入如下內容;
#include "xxx.h"
#pragma comment(lib,"xxx.dll")
生成的dll不需要def文件和cpp文件也可以
不包含xxx.h的話,需要把h文件內的函數原型聲明添加進yyy.cpp
編譯時需要加入dll,類似這樣:
g++ -L. -o yyy.exe yyy.cpp xxx.dll
2.動態調用dll
首先,你需要包含windows.h
#include <windows.h>
你還需要一個句柄保存裝入的dll文件
HINSTANCE hDll=LoadLibrary("xxx.dll");
聲明所需函數的對應函數指針類型
typedef void (*pfunc)(void);
獲得指向函數的函數指針
pfunc pf=(pfunc*)GetProcAddress(hDll,"example");
使用完畢後,要釋放dll文件
FreeLibrary(hDll);
3.如果是so文件的話也是同樣的道理,可以在工程屬性裡面添加好庫的路徑,或者編譯的時候指明庫。然後再在cpp中include相應的頭文件:
如Linux下調用庫opencv_core.so
g++ main.cpp -o test -L usr/lib/ -lopencv_core

只要路徑和命名空間都寫對了,就可以使用類名關鍵字來實例化類了。
myobj m;
m.func( );

⑨ 如何將lib文件轉換成so文件

你試下用解壓軟體打開,把軟體直接拖進去。有些軟體直接拖進去開機運行不了(像輸入法),需要提取軟體的lib下的.so文件(同樣用解壓軟體打開提取)放到ROM的system/lib目錄下。

熱點內容
cocos2d30編譯 發布:2024-10-25 17:20:51 瀏覽:993
app直播平台源碼 發布:2024-10-25 17:19:57 瀏覽:223
asp文件上傳帶進度條 發布:2024-10-25 17:19:54 瀏覽:656
mp4反編譯軟體 發布:2024-10-25 16:47:33 瀏覽:998
哪個是提升電腦幀數的配置 發布:2024-10-25 16:43:45 瀏覽:95
以一種訪問許可權不允許的方式 發布:2024-10-25 16:38:32 瀏覽:404
嵌入式linux開發環境搭建 發布:2024-10-25 16:26:51 瀏覽:325
奧迪a4l乞丐版什麼配置 發布:2024-10-25 16:20:33 瀏覽:411
python讀取txt文件數據 發布:2024-10-25 16:07:36 瀏覽:23
獲取區域網伺服器的真實ip 發布:2024-10-25 16:01:36 瀏覽:28