新聞中心
快速掌握Go在Linux中加載SO的方法

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供平橋網(wǎng)站建設(shè)、平橋做網(wǎng)站、平橋網(wǎng)站設(shè)計(jì)、平橋網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、平橋企業(yè)網(wǎng)站模板建站服務(wù),十余年平橋做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
Go 語言是一門現(xiàn)代化的編程語言,因?yàn)樗某霈F(xiàn),讓很多程序員感到不再需要過多關(guān)注內(nèi)存分配和回收等資源管理問題,而可以更加專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)。
在 Go 中實(shí)現(xiàn)動(dòng)態(tài)鏈接庫加載和使用,一般就是通過使用 C 運(yùn)行時(shí)來復(fù)用 C 語言中的處理方式。動(dòng)態(tài)鏈接庫在外部編寫,而后鏈接進(jìn)入 “Go”的應(yīng)用程序中。那么在這篇文章中我們就向大家介紹一下如何在 Linux 環(huán)境中快速掌握 Go 加載 SO 的方法。
之一步:創(chuàng)建 Go 項(xiàng)目
首先我們需要?jiǎng)?chuàng)建一個(gè) Go 項(xiàng)目,可以使用 GoLand、VSCode 等常見的集成開發(fā)環(huán)境創(chuàng)建,或者手動(dòng)創(chuàng)建 Go 項(xiàng)目,推薦使用 Go module。
手動(dòng)創(chuàng)建的方式如下:
“`bash
mkdir demo
cd demo
go mod init demo
“`
第二步:創(chuàng)建動(dòng)態(tài)鏈接庫
我們先來創(chuàng)建一個(gè)簡單的動(dòng)態(tài)鏈接庫,在 $GOPATH 目錄下創(chuàng)建一個(gè)名為 demo/solib 的文件夾,并在該文件夾中編寫示例代碼:
“`go
package mn
import “C”
//export Add
func Add(a, b int) int {
return a + b
}
func mn() {}
“`
其中 “//export” 是一個(gè)特殊的注釋,指定了在 C 代碼中可被調(diào)用的函數(shù),Add 就是被動(dòng)態(tài)鏈接庫中 C 代碼使用的函數(shù)。
現(xiàn)在我們需要編譯一下這個(gè) Go 代碼,命令如下:
“`bash
go build -buildmode=c-shared -o libsodemo.so solib.go
“`
用上述命令來生成我們所需要的動(dòng)態(tài)鏈接庫,此操作完成之后,我們就可以得到名為 libsodemo.so 的文件。
第三步:創(chuàng)建 C 語言文件
我們使用 C 語言代碼來調(diào)用 Go 動(dòng)態(tài)鏈接庫中的函數(shù),代碼如下:
“`c
#include
#include
// 定義與 Go 相對應(yīng)的 C 函數(shù)指針
typedef int (*addFunc)(int a, int b);
addFunc Add;
int mn() {
void *handle;
char *error;
handle = dlopen(“./libsodemo.so”, RTLD_NOW);
if (!handle) {
fputs(dlerror(), stderr);
return 1;
}
// 將 C 指針指向 Go 暴露引入的函數(shù)
Add = (addFunc) dlsym(handle, “Add”);
if ((error = dlerror()) != NULL) {
fputs(error, stderr);
return 1;
}
printf(“%d\n”, Add(1, 2));
dlclose(handle);
return 0;
}
“`
該代碼先通過 dlopen 函數(shù)打開指定的路徑的動(dòng)態(tài)鏈接庫,然后使用 dlsym 函數(shù)獲取 Go 動(dòng)態(tài)鏈接庫中的指定函數(shù)的函數(shù)指針,最后使用函數(shù)指針調(diào)用 Go 中的函數(shù)。
第四步:編譯執(zhí)行程序
接下來我們需要對上述代碼進(jìn)行編譯執(zhí)行操作,命令如下:
“`bash
gcc -o ctest ctest.c -ldl
./ctest
“`
這時(shí)候就可以看到輸出值為“3”,表示 Go 中的 Add 函數(shù)已經(jīng)被成功調(diào)用。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
go程序可以在linux上運(yùn)行嗎
可以,deepin部分軟件就是用go語言寫的
可以。 Go語言是谷歌推出的一種編程語言,可以在不損失應(yīng)用程序性能的情況下降低前薯代碼的復(fù)雜性。Go語言專門針對多處理器系統(tǒng)應(yīng)用程序的編程進(jìn)棚如行了優(yōu)化,使用Go編譯的程序可以媲美C或C++代碼的速度,而且更加慧和者安全、支持并行進(jìn)程
linux下怎么安裝Go開發(fā)環(huán)境
gcc要在PATH環(huán)境變量中添加路徑,不知道你添加胡做頌了沒? “./configure”表示在當(dāng)前路徑下執(zhí)行可褲鄭執(zhí)行文件“configure”,至于makefile的話,你的意思是為某個(gè)項(xiàng)目胡衡寫的makefile不能執(zhí)行嗎?還是說就gcc源碼包里的makefile無法執(zhí)行,沒搞懂你問的是什么
go linux 加載so的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于go linux 加載so,快速掌握go在linux中加載so的方法,go程序可以在linux上運(yùn)行嗎,linux下怎么安裝Go開發(fā)環(huán)境的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),香港虛擬主機(jī)被稱為香港虛擬空間/香港網(wǎng)站空間,或者簡稱香港主機(jī)/香港空間。香港虛擬主機(jī)特點(diǎn)是免備案空間開通就用, 創(chuàng)新互聯(lián)香港主機(jī)精選cn2+bgp線路訪問快、穩(wěn)定!
標(biāo)題名稱:快速掌握go在linux中加載so的方法(golinux加載so)
標(biāo)題鏈接:http://fisionsoft.com.cn/article/ccedeio.html


咨詢
建站咨詢
