導航:首頁 > 操作系統 > linuxso文件打開

linuxso文件打開

發布時間:2022-05-08 20:15:14

linux上.so文件可以直接運行嗎

so文件不可以直接運行的,so文件是動態函數庫文件,函數庫文件(包括.a文件和.so文件)只能用來被調用運行,不能直接運行的,so文件就相當於Windows下的dll文件,dll文件就是不能直接運行的。

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

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

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

-lxx

xx是你的.so文件名

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

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

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

(3)linuxso文件打開擴展閱讀:

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,只生成目標文件。

⑷ LINUX下.so結尾的文件如何運行,或者使用

.so結尾的文件是動態鏈接庫,動態鏈接庫不能主動運行,只能被動調用。

.so的使用方法:

  1. 需要這個庫放置到程序的搜索路徑下

  2. 需要這個庫提供的頭文件在c/c++程序中鏈接調用

  3. c/c++程序執行時會到搜索路徑下動態載入.so庫

⑸ 怎麼打開.so文件

SO文件為主要與primarily Unknown Apple II File (found on Golden Orchard Apple II CD Rom)相關聯的開發者文件 。
打開 SO文件的最快速最容易的方法便是雙擊文件。這樣做可以讓Windows智能決定使用正確的程序打開SO文件。
若出現無法打開SO文件的情況,很可能是因為電腦上沒有安裝查看或編輯SO文件擴展名的恰當程序。
若電腦打開了SO文件,但使用的是錯誤的應用程序,則需要更改Windows注冊文件關聯設置。也就是說,Windows正在使用錯誤的程序關聯SO 文件擴展名。

⑹ linux 中怎麼看.so 文件

方法一:
文件名已經帶有版本號:

這種情況下很容易就能夠看到軟鏈指向的文件的版本號是 1.0.1
方法二:
當文件名不帶版本號時:如下所示

使用readelf -a ***.so讀取出文件的版本號,不過此時只能讀取到主版本號,version:1

方法三:
如果文件名不帶版本號,且又想知道具體的版本號的時候怎麼辦呢?
這時候只能使用傻瓜方法,生成md5值與已知版本號的共享庫相對比了。
$ md5sum fcrypt.so.1.0.1
fcrypt.so.1.0.1
$ md5sum fcrypt.so
fcrypt.so

兩個md5值一致,由此得出版本應該是1.0.1。

⑺ linux中.so後綴的文件怎麼使用

在WINDOWS系統中有很多的動態鏈接庫(以.DLL為後綴的文件,DLL即Dynamic Link Library)。這種動態鏈接庫,和靜態函數庫不同,它裡面的函數並不是執行程序本身的一部分,而是根據執行程序需要按需裝入,同時其執行代碼可在多個 執行程序間共享,節省了空間,提高了效率,具備很高的靈活性。同樣,LINUX的也具備類似的動態鏈接庫,而且為數不少。在/lib目錄下,就有許多以.so作後綴的文件,這就是LINUX系統應用的動態鏈接庫,只不過與WINDOWS叫法不同,它叫so,即Shared Object,共享對象。(在LINUX下,靜態函數庫是以.a作後綴的) X-WINDOW作為LINUX下的標准圖形窗口界面,它本身就採用了很多的動態鏈接庫(在/usr/X11R6/lib目錄下),以方便程序間的共享, 節省佔用空間。flash只是一個插件,在windows中就是一個ocx的鏈接庫方式(和dll略有不同),因此linux中一旦你了一個共享函數庫,你還需要安裝它。其實簡單的方法就是拷貝
你的庫文件到指定的標準的目錄(例如/usr/lib),然後運行ldconfig。
如果你沒有許可權去做這件事情,例如你不能修改/usr/lib目錄,那麼
你就只好通過修改你的環境變數來實現這些函數庫的使用了。首先,
你需要創建這些共享函數庫;然後,設置一些必須得符號鏈接,特別
是從soname到真正的函數庫文件的符號鏈接,簡單的方法就是運行ldconfig:
ldconfig -n directory_with_shared_libraries
然後你就可以設置你的LD_LIBRARY_PATH這個環境變數,它是一個以逗號
分隔的路徑的集合,這個可以用來指明共享函數庫的搜索路徑。例如
,使用bash,就可以這樣來
啟動一個程序my_program:
LD_LIBRARY_PATH=.LD_LIBRARY_PATH my_program

⑻ Linux c++開發.so文件的使用

假設在linux上用gcc編譯程序,需要用下列編譯選項生成.so文件:

gcc -fPIC -shared
.so 文件安裝一般是在/usr/lib或者/usr/local/lib下,安裝後不需要絕對路徑即可使用。當然你也可以安裝到工程文件夾下面,不過很少有這么做的。使用時只需要dlopen()函數打開這個庫,用dlsym()函數將動態庫的函數體載入進來;同樣已載入的動態函數庫可以用dlclose()關閉。
詳細使用方法網路搜dlopen 即可。

⑼ .so文件怎麼打開啊急急急

工具/材料:記事本,so文件。

1、首先在桌面上,選中「so文件」圖標。

⑽ linux環境java如何調用so文件

用JNI實現
實例:

創建HelloWorld.java
class HelloWorld
{
private native void print();
public staticvoid main(String[] args)
{
new HelloWorld().print();
}

static
{
System.loadLibrary("HelloWorld");
}
}
注意print方法的聲明,關鍵字native表明該方法是一個原生代碼實現的。另外注意static代碼段的System.loadLibrary調用,這段代碼表示在程序載入的時候,自動載入libHelloWorld.so庫。
編譯HelloWorld.java
在命令行中運行如下命令:
javac HelloWorld.java
在當前文件夾編譯生成HelloWorld.class。
生成HelloWorld.h
在命令行中運行如下命令:
javah -jni HelloWorld
在當前文件夾中會生成HelloWorld.h。打開HelloWorld.h將會發現如下代碼:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
該文件中包含了一個函數Java_HelloWorld_print的聲明。這裡麵包含兩個參數,非常重要,後面講實現的時候會講到。
實現HelloWorld.c
創建HelloWorld.c文件輸入如下的代碼:
#include <jni.h>
#include <stdio.h>
#include "HelloWorld.h"

JNIEXPORT void JNICALL

Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
}
注意必須要包含jni.h頭文件,該文件中定義了JNI用到的各種類型,宏定義等。
另外需要注意Java_HelloWorld_print的兩個參數,本例比較簡單,不需要用到這兩個參數。但是這兩個參數在JNI中非常重要。
env代表java虛擬機環境,Java傳過來的參數和c有很大的不同,需要調用JVM提供的介面來轉換成C類型的,就是通過調用env方法來完成轉換的。
obj代表調用的對象,相當於c++的this。當c函數需要改變調用對象成員變數時,可以通過操作這個對象來完成。
編譯生成libHelloWorld.so
在Linux下執行如下命令來完成編譯工作:
cc -I/usr/lib/jvm/java-6-sun/include/linux/
-I/usr/lib/jvm/java-6-sun/include/
-fPIC -shared -o libHelloWorld.so HelloWorld.c
在當前目錄生成libHelloWorld.so。注意一定需要包含Java的include目錄(請根據自己系統環境設定),因為Helloworld.c中包含了jni.h。
另外一個值得注意的是在HelloWorld.java中我們LoadLibrary方法載入的是
「HelloWorld」,可我們生成的Library卻是libHelloWorld。這是Linux的鏈接規定的,一個庫的必須要是:lib+庫
名+.so。鏈接的時候只需要提供庫名就可以了。
運行Java程序HelloWorld
大功告成最後一步,驗證前面的成果的時刻到了:
java HelloWorld
如果你這步發生問題,如果這步你收到java.lang.UnsatisfiedLinkError異常,可以通過如下方式指明共享庫的路徑:
java -Djava.library.path='.' HelloWorld
當然還有其他的方式可以指明路徑請參考《在Linux平台下使用JNI》。
我們可以看到久違的「Hello world!」輸出了。

閱讀全文

與linuxso文件打開相關的資料

熱點內容
電腦加速器伺服器地址 瀏覽:896
android默認啟動器 瀏覽:142
電腦上電子書如何傳到安卓手機上 瀏覽:759
美國科技招聘程序員 瀏覽:813
網頁轉pdf工具 瀏覽:640
rust怎麼載入不了伺服器 瀏覽:539
科普編程人的東西 瀏覽:471
為什麼無法驗證伺服器 瀏覽:365
壓縮報告不要面面俱到 瀏覽:860
php是哪國貨幣 瀏覽:859
什麼是合理解壓 瀏覽:155
javaoracle建表 瀏覽:924
延時的宏命令 瀏覽:60
視覺中國程序員 瀏覽:877
程序員性生活為什麼這么短 瀏覽:445
linux命令date 瀏覽:114
lync2013伺服器地址 瀏覽:786
無犯罪記錄從哪個app查 瀏覽:671
伺服器的私有ip是干什麼用的 瀏覽:848
c程序員面試秘笈pdf 瀏覽:849