導航:首頁 > 源碼編譯 > c編譯so

c編譯so

發布時間:2022-02-10 18:24:51

『壹』 linux下如何用c++編譯so文件,c語言又怎樣調用這個so文件

根據相應的頭文件、和鏈接使用的庫文件,編譯鏈接後,即是可以使用該.so文件了

~~~~~~~

『貳』 linux的C編程,怎麼使用so文件

linux下的.so文件為共享庫,相當於windows下的dll文件,使用方法如下:
在你的工程源代碼里包含.h頭文件,然後可以調用動態庫里的函數,在鏈接的時候加上如下編譯器參數:
-l xx.so
如果你的so文件是以lib開頭的,還可以直接這樣使用:
-lxx
xx是你的.so文件名
其實使用方法和你使用數學庫函數是一樣的,源代碼中添加
#include <math.h>,編譯的時候,加上-lm參數。

『叄』 問個C語言生成.so文件的問題

關於那個aaa.h,它是只要跟aaa.c放在同一個目錄下就一起編譯到aaa.so里

『肆』 怎樣把.c文件編譯成.so文件

.so是linux用的
所以 要生成so 需要用gcc
和生成可執行文件類似,只是增加一些編譯選項
命令如下
gcc SOURCE_FILES -fPIC -shared -o TARGET
SOURCE_FILES可以是.c文件,也可以是經過-c編譯出來的.o文件
TARGET為so文件。

『伍』 Linux下如何將多個.c文件生成.so文件

頭文件只是在開發編譯的時候才會用到,生成動態庫的時候記得在gcc編譯的時加上-fPIC參數

『陸』 Linux c調用so

實例代碼(soTest.c):

1 #include <stdio.h>
2 #include <dlfcn.h>
3
4 int main(int argc, char *argv[]){
5 void * libm_handle = NULL;
6 float (*cosf_method)(float);
7 char *errorInfo;
8 float result;
9
10 // dlopen 函數還會自動解析共享庫中的依賴項。這樣,如果您打開了一個依賴於其他共享庫的對象,它就會自動載入它們。
11 // 函數返回一個句柄,該句柄用於後續的 API 調用
12 libm_handle = dlopen("libm.so", RTLD_LAZY );
13 // 如果返回 NULL 句柄,表示無法找到對象文件,過程結束。否則的話,將會得到對象的一個句柄,可以進一步詢問對象
14 if (!libm_handle){
15 // 如果返回 NULL 句柄,通過dlerror方法可以取得無法訪問對象的原因
16 printf("Open Error:%s.\n",dlerror());
17 return 0;
18 }
19
20 // 使用 dlsym 函數,嘗試解析新打開的對象文件中的符號。您將會得到一個有效的指向該符號的指針,或者是得到一個 NULL 並返回一個錯誤
21 cosf_method = dlsym(libm_handle,"cosf");
22 errorInfo = dlerror();// 調用dlerror方法,返回錯誤信息的同時,內存中的錯誤信息被清空
23 if (errorInfo != NULL){
24 printf("Dlsym Error:%s.\n",errorInfo);
25 return 0;
26 }
27
28 // 執行「cosf」方法
29 result = (*cosf_method)(0.0);
30 printf("result = %f.\n",result);
31
32 // 調用 ELF 對象中的目標函數後,通過調用 dlclose 來關閉對它的訪問
33 dlclose(libm_handle);
34
35 return 0;
36 }

在這個例子中主要是調用了 math 庫(libm.so)中的「cosf」函數,dlopen函數的第二個參數表示載入庫文件的模式,主要有兩種:RTLD_LAZY 暫緩決定,等有需要時再解出符號;RTLD_NOW 立即決定,返回前解除所有未決定的符號。另外記得引用包含API的頭文件「#include <dlfcn.h>」(^_^)。

『柒』 用cc怎樣把.c文件編譯成.so文件

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

『捌』 linux中把.c的文件編譯成.so

就跟用VS編譯dll或者lib文件差不多,把代碼編譯完成以後,命名為相應的後綴就好了。

例如:
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

『玖』 linux下c語言編譯so問題

不需要在自己的.so中調用別人的.so,只需要編譯自己的,編譯.so時,系統不會檢查未定義的函數。
直接在編譯自己的應用程序時鏈接這兩個.so就可以了!
gcc
-o
exec_file
mysrc.c
-L./
-lXXX
-L/usr/lib
-lmysqlclient

『拾』 C/C++源文件直接交叉編譯生成.so文件供安卓應用程序調用,可以嗎

Jni調用就行了,是要按規則寫介面api,如果介面很多,也沒法,那是你的業務問題,要重新設計業務邏輯。我們之前用的c++單獨交叉編譯一個進程,和安卓界面用tcp通信,如果介面多也以為著協議多,一樣的。

閱讀全文

與c編譯so相關的資料

熱點內容
android百度地圖彈出框 瀏覽:860
什麼app沒廣告 瀏覽:147
php欺騙提交 瀏覽:745
程序員都是做什麼程序 瀏覽:564
linuxfor循環語句 瀏覽:567
php收入 瀏覽:705
firefox命令行 瀏覽:788
用什麼app軟體查詢整機報告 瀏覽:152
源碼畫板的製作方法 瀏覽:973
eq對伺服器有什麼要求 瀏覽:888
程序員那麼可愛第七集 瀏覽:675
方舟非專用伺服器代碼是什麼 瀏覽:714
ug伺服器未啟動怎麼解決 瀏覽:530
怎麼免費進2b2t伺服器 瀏覽:354
易學的php框架 瀏覽:382
文件夾擺桌圖片 瀏覽:690
姓名快速檢索演算法 瀏覽:106
主流單片機cpu頻率 瀏覽:870
編程有可能會被納入學科嗎 瀏覽:48
二級抗震柱子要全高加密么 瀏覽:369