我已經瀏覽了 StackOverflow 和 Ask Ubuntu 上的所有解決方案。我有一個圍棋程序:package mainimport "C"//export Getintfunc Getint() int { return 2}func main() {}我已經生成.so了名稱為t.so and header fileth` 的文件現在我想在我的 C 程序中使用這個函數。我已經編寫了代碼,但我不知道如何執行它。#include <stdio.h>#include <t.h>int main(){int a;a=Getint();printf("number : %d",a);return 0;}當我執行它時gcc c.c t.so它生成a.out文件但在運行的時候a.out用./a.out它給出了一個錯誤:./a.outError while loading shared libraries: t.so: can not open shared object file: no such file or directory exists.然后我嘗試:gcc -c c.c -l t.so所以它生成c.o文件并且它是不可執行的。
3 回答

慕田峪4524236
TA貢獻1875條經驗 獲得超5個贊

Smart貓小萌
TA貢獻1911條經驗 獲得超7個贊
很可能您的加載程序找不到庫。LD_LIBRARY_PATH
在運行二進制文件之前,嘗試將路徑放在 libarry 所在的目錄中。
export LD_LIBRARY_PATH=/path/to/my/library ./a.out

慕雪6442864
TA貢獻1812條經驗 獲得超5個贊
.so 文件是共享對象,意思是所有需要它們的應用程序都可以使用的對象。也就是說,共享的。由于這種特性,它們需要存放在眾所周知的地方。此外,它們需要由動態鏈接器索引。
例如,在 linux 中,您通常有一個文件/etc/ld.so.conf,其中存儲了自動讀取共享對象的所有目錄
所以你的選擇是:
把你的共享對象文件放在一個眾所周知的地方
將您的共享對象文件放在您選擇的位置,并讓動態鏈接器知道它:在 linux 中,您可以修改ld.so.conf并運行ldconfig以更新 ld 索引
正如其他人建議在環境變量 LD_LIBRARY_PATH 中寫入 .so 的路徑(因為動態鏈接器在運行應用程序之前讀取它)。這必須在每個環境創建時完成
其他建議在編譯時使用 -rpath。請注意,通過這種方式,您無法在編譯后移動 .so 文件
我個人更喜歡在系統庫路徑中安裝 .so 文件
- 3 回答
- 0 關注
- 390 瀏覽
添加回答
舉報
0/150
提交
取消