導航:首頁 > 操作系統 > linuxc編譯so

linuxc編譯so

發布時間:2023-05-15 19:28:00

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

C++編譯so文件與C編譯so一樣都是加參數 -shared

C語言調用C++的so
首先C要調用的C++的函數必須是extern "C"聲明的。
其次編譯C程序時需要增加鏈接libstdc++.so(可能名字不打對自己查查)

B. 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

C. LLINUX GCC 編譯C使用自定義動態鏈接庫.so的問題

1. 可以參考如下關於庫文件的文章:http://numanal.com/?p=129
2. 在編譯文件時最好用-L指明自定義庫的存在目錄, 利用如下任一語句(.so文件與.c文件在同一目錄):
gcc test.c -o test2 -L./verify.so
gcc test.c -o test2 -L.
3. 你這里在的問題應該與編譯器的某些兼容性有關, 在實際編寫程序的時候最好按gcc的語法規范走, 避免不必要的錯誤.

D. linux的C編程,怎麼使用so文件

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

E. 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>」(^_^)。

F. 請問我有一個.so文件,如何在Linux下編程使用呢

-lxx

xx是你的.so文件名

其實使用方法和你使用數學庫函數是一樣的,源代碼中添加

#include <math.h>,編譯的時候,加上-lm參數。

註:linux下的擾褲.so文件為共享庫,相當於windows下的dll文件。

(6)linuxc編譯so擴展閱讀:

linux下編寫調用so文件實例

.so是Linux(Unix)下的動態鏈接庫. 和.dll類似.

比如:

文件有: a.c, b.c, c.c

gcc -c a.c

gcc -c b.c

gcc -c c.c

gcc -shared libXXX.so a.o b.o c.o

要使用的話也緩友簡很簡單. 比如編譯d.c, 使用到libXXX.so中的函數, libXXX.so地址是MYPATH
gcc d.c -o d -LMYPATH -lXXX

注意不是-llibXXX

test.c文件和一個test.h,這兩個文件要生成libsotest.so文件。然後我還有一個testso.c文件,在這個文件裡面調用libsotest.so中的函數。

編寫的過程中,首先是編告孝譯so文件,我沒有編寫makefile文件,而是參考的2裡面說的直接寫的gcc命令

因為so文件裡面沒有main函數,所以是不可執行的,所以編譯的時候要加上-c,只生成目標文件。

G. linux的C編程,怎麼使用so文件,freeimage的lib使用

樓主您好!
很高興和您交流。
關於您的描述,我懷疑問題出在:調用動態庫的時候,需要對當前目錄進行環境變數的設置。
即:export LD_LIBRARY_PATH=/usr/lib/(如果我沒記錯的話)
之後重啟終端,試試。
希望能夠幫到您。
祝您愉快!

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

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

I. Linux下如何將多個.c文件生成.so文件

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

閱讀全文

與linuxc編譯so相關的資料

熱點內容
反編譯作業幫 瀏覽:856
釘釘打卡伺服器過什麼意思 瀏覽:139
鏤空加密隔斷牆效果圖 瀏覽:539
windows7怎麼安裝證書伺服器 瀏覽:952
證券業務的程序員 瀏覽:202
u點伺服器wifi密碼如何設置 瀏覽:864
寶馬x5大燈編程 瀏覽:673
python安裝和使用 瀏覽:381
加密的門禁卡復制了用不了 瀏覽:714
javacsv讀寫 瀏覽:806
ug編程教程pdf 瀏覽:763
latex編譯軟體安卓版 瀏覽:248
如何在信合app上交居民醫保 瀏覽:109
丑惡pdf 瀏覽:365
陝西定頻壓縮機銷售公司 瀏覽:795
安卓系統如何幫人打王者 瀏覽:427
sbtlinux安裝 瀏覽:141
阿里雲sip伺服器 瀏覽:73
身為程序員的你怎麼拚命 瀏覽:453
android圖片手勢放大 瀏覽:587