亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

go語(yǔ)言調(diào)用c語(yǔ)言的so動(dòng)態(tài)庫(kù)的實(shí)現(xiàn)

 更新時(shí)間:2024年10月15日 10:17:31   作者:快刀一哥  
在Go語(yǔ)言開(kāi)發(fā)過(guò)程中,有時(shí)需要調(diào)用C或C++編寫(xiě)的so動(dòng)態(tài)庫(kù),本文介紹了如何在Go語(yǔ)言中調(diào)用so庫(kù)的步驟和注意事項(xiàng),包括環(huán)境準(zhǔn)備、編譯生成.so文件、Go文件編寫(xiě)、以及可能遇到的問(wèn)題和解決方法,感興趣的可以了解一下

背景

go語(yǔ)言編寫(xiě)代碼,底層需要一調(diào)用C?C++的so庫(kù),避免自己再去造輪子,所以想直接使用golang調(diào)用so,參考了其他博客大佬寫(xiě)的,中間出現(xiàn)過(guò)很多錯(cuò)誤,都記錄下來(lái)供大家參考  

環(huán)境準(zhǔn)備

因?yàn)橐獙語(yǔ)言打包,會(huì)需要借助gcc的工具,可以直接網(wǎng)上下載安裝,還有g(shù)o工具,也可以在網(wǎng)上直接下載安裝

sudo apt-get update
sudo apt install gcc
sudo apt install golang-go

操作步驟

1.創(chuàng)建目錄結(jié)構(gòu)如下

在這里插入圖片描述

2.創(chuàng)建c文件和h文件

創(chuàng)建mylibrary.c

#include <stdio.h>

int addtest(int a,int b) {
    int c = a+b;
    printf("Hello from C!\n");
    printf("a + b =%d \n",c);
    return c;
}

創(chuàng)建mylibrary.h

#ifndef MYLIBRARY_H
#define MYLIBRARY_H

int addtest(int a,int b);

#endif

3.編譯生成.so

gcc -shared -o ./lib/libmyprint.so include/mylibrary.c

有的文章提到,編譯需要加上-fPIC 參數(shù),應(yīng)該可以不加

4.編寫(xiě)go文件

go設(shè)置 需要打開(kāi)CGO

set CGO_ENABLED=1

編寫(xiě)main.go

package main

/*
#cgo CFLAGS: -I./include   //h頭文件的位置
#cgo LDFLAGS: -L/home/meng/cgotest/lib -lmyprint   //so文件的路徑及so文件的名稱,這里只能使用絕對(duì)路徑
#include "include/mylibrary.h"
*/
import "C"
import "fmt"
func main() {

	c := C.addtest(2, 3)
	fmt.Println("c value is:", c)
}

5.執(zhí)行

編寫(xiě)完go文件,應(yīng)該就可以執(zhí)行了,但是運(yùn)行的時(shí)候會(huì)報(bào)錯(cuò)

在這里插入圖片描述

這個(gè)從網(wǎng)上查了一下,需要配置一下
sudo vim /etc/ld.so.conf 文件,將我們的路徑寫(xiě)在該文件下,

在這里插入圖片描述

編輯好后執(zhí)行:sudo ldconfig

之后再運(yùn)行就可以成功了

在這里插入圖片描述

或者在編譯時(shí)指定動(dòng)態(tài)庫(kù)的路徑

go build -ldflags=“-r ./” main.go

也可以運(yùn)行成功,具體是什么原因大家可以一起交流一下。

補(bǔ)充,思考了一下,因?yàn)榇a中配置的動(dòng)態(tài)庫(kù)及位置,是在編譯的時(shí)候使用,運(yùn)行時(shí)程序在定義的位置查找動(dòng)態(tài)庫(kù)
build能夠編譯成功,運(yùn)行報(bào)錯(cuò)

在這里插入圖片描述

所以解決的方法還可以在lib中添加路徑

export LD_LIBRARY_PATH=/home/meng/cgotest/lib

到此這篇關(guān)于go語(yǔ)言調(diào)用c語(yǔ)言的so動(dòng)態(tài)庫(kù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)go語(yǔ)言調(diào)用c語(yǔ)言so動(dòng)態(tài)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入理解golang chan的使用

    深入理解golang chan的使用

    本文主要介紹了golang chan的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 詳解如何使用go-acme/lego實(shí)現(xiàn)自動(dòng)簽發(fā)證書(shū)

    詳解如何使用go-acme/lego實(shí)現(xiàn)自動(dòng)簽發(fā)證書(shū)

    這篇文章主要為大家詳細(xì)介紹了如何使用?go-acme/lego?的客戶端或庫(kù)完成證書(shū)的自動(dòng)簽發(fā),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • Go語(yǔ)言基于viper的conf庫(kù)進(jìn)行配置文件解析

    Go語(yǔ)言基于viper的conf庫(kù)進(jìn)行配置文件解析

    在現(xiàn)代軟件開(kāi)發(fā)中,配置文件是不可或缺的一部分,如何高效地將這些格式解析到 Go 結(jié)構(gòu)體中,一直是開(kāi)發(fā)者的痛點(diǎn),下面我們來(lái)看看如何使用conf進(jìn)行配置文件解析吧
    2025-03-03
  • 一文徹底理解Golang閉包實(shí)現(xiàn)原理

    一文徹底理解Golang閉包實(shí)現(xiàn)原理

    閉包對(duì)于一個(gè)長(zhǎng)期寫(xiě)Java的開(kāi)發(fā)者來(lái)說(shuō)估計(jì)鮮有耳聞,光這名字感覺(jué)就有點(diǎn)"神秘莫測(cè)"。這篇文章的主要目的就是從編譯器的角度來(lái)分析閉包,徹底搞懂閉包的實(shí)現(xiàn)原理,需要的可以參考一下
    2022-10-10
  • Go語(yǔ)言原子操作atomic的使用

    Go語(yǔ)言原子操作atomic的使用

    本文介紹了Go語(yǔ)言原子操作的使用方法,原子操作是一種無(wú)鎖的技術(shù),可通過(guò)CPU指令實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • Golang實(shí)現(xiàn)內(nèi)網(wǎng)穿透詳解

    Golang實(shí)現(xiàn)內(nèi)網(wǎng)穿透詳解

    這篇文章主要為大家詳細(xì)介紹了Golang實(shí)現(xiàn)內(nèi)網(wǎng)穿透的相關(guān)知識(shí),包括原理和代碼實(shí)現(xiàn),文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下
    2024-11-11
  • Golang實(shí)現(xiàn)讀取excel文件并轉(zhuǎn)換為JSON格式

    Golang實(shí)現(xiàn)讀取excel文件并轉(zhuǎn)換為JSON格式

    本文介紹了如何使用Golang讀取Excel文件并將其轉(zhuǎn)換為JSON格式,通過(guò)安裝excelize依賴和創(chuàng)建readExcelToJSON方法,可以實(shí)現(xiàn)這一功能,如果需要轉(zhuǎn)換數(shù)據(jù)類(lèi)型,可以修改相應(yīng)的代碼,需要的朋友可以參考下
    2025-03-03
  • golang?gorm的預(yù)加載及軟刪硬刪的數(shù)據(jù)操作示例

    golang?gorm的預(yù)加載及軟刪硬刪的數(shù)據(jù)操作示例

    這篇文章主要介紹了golang?gorm的預(yù)加載及軟刪硬刪的數(shù)據(jù)操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • golang使用net/rpc庫(kù)實(shí)現(xiàn)rpc

    golang使用net/rpc庫(kù)實(shí)現(xiàn)rpc

    這篇文章主要為大家詳細(xì)介紹了golang如何使用net/rpc庫(kù)實(shí)現(xiàn)rpc,文章的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的小伙伴可以參考一下
    2024-01-01
  • Golang易錯(cuò)知識(shí)點(diǎn)匯總

    Golang易錯(cuò)知識(shí)點(diǎn)匯總

    這篇文章匯總了在開(kāi)發(fā)和刷面試題過(guò)程中遇到的Golang容易搞錯(cuò)的知識(shí)點(diǎn),關(guān)鍵部分也都為大家寫(xiě)了代碼示例,感興趣的小伙伴可以了解一下
    2022-09-09

最新評(píng)論