最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go語言調用c語言的so動態(tài)庫的實現

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

背景

go語言編寫代碼,底層需要一調用C?C++的so庫,避免自己再去造輪子,所以想直接使用golang調用so,參考了其他博客大佬寫的,中間出現過很多錯誤,都記錄下來供大家參考  

環(huán)境準備

因為要將c語言打包,會需要借助gcc的工具,可以直接網上下載安裝,還有go工具,也可以在網上直接下載安裝

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

操作步驟

1.創(chuàng)建目錄結構如下

在這里插入圖片描述

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 參數,應該可以不加

4.編寫go文件

go設置 需要打開CGO

set CGO_ENABLED=1

編寫main.go

package main

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

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

5.執(zhí)行

編寫完go文件,應該就可以執(zhí)行了,但是運行的時候會報錯

在這里插入圖片描述

這個從網上查了一下,需要配置一下
sudo vim /etc/ld.so.conf 文件,將我們的路徑寫在該文件下,

在這里插入圖片描述

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

之后再運行就可以成功了

在這里插入圖片描述

或者在編譯時指定動態(tài)庫的路徑

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

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

補充,思考了一下,因為代碼中配置的動態(tài)庫及位置,是在編譯的時候使用,運行時程序在定義的位置查找動態(tài)庫
build能夠編譯成功,運行報錯

在這里插入圖片描述

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

export LD_LIBRARY_PATH=/home/meng/cgotest/lib

到此這篇關于go語言調用c語言的so動態(tài)庫的實現的文章就介紹到這了,更多相關go語言調用c語言so動態(tài)庫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Go語言使用對稱加密的示例詳解

    Go語言使用對稱加密的示例詳解

    在項目開發(fā)中,我們經常會遇到需要使用對稱密鑰加密的場景,比如客戶端調用接口時,參數包含手機號、身份證號或銀行卡號等。本文將詳細講解Go語言使用對稱加密的方法,需要的可以參考一下
    2022-06-06
  • Go語言運算符的具體使用

    Go語言運算符的具體使用

    本文介紹了Go語言中常用的運算符類型及其使用方法,主要內容包括: 算術運算符,關系運算符,邏輯運算符,位運算符,每種運算符都通過表格形式展示了具體功能,感興趣的可以了解一下
    2026-06-06
  • 詳解Go 1.22 for循環(huán)的兩處重要更新

    詳解Go 1.22 for循環(huán)的兩處重要更新

    這篇文章主要詳細介紹了Go 1.22 for循環(huán)的兩處重要更新,Go 1.22 版本于 2024 年 2 月 6 日發(fā)布,引入了幾個重要的特性和改進,在語言層面上,這個版本對 for 循環(huán)進行了兩處更新,本文將會對 for 循環(huán)的兩個更新進行介紹,需要的朋友可以參考下
    2024-02-02
  • Golang使用zlib壓縮和解壓縮字符串

    Golang使用zlib壓縮和解壓縮字符串

    本文給大家分享的是Golang使用zlib壓縮和解壓縮字符串的方法和示例,有需要的小伙伴可以參考下
    2017-02-02
  • Golang 之區(qū)分類型別名與類型定義的方法

    Golang 之區(qū)分類型別名與類型定義的方法

    這篇文章主要介紹了Golang 之區(qū)分類型別名與類型定義的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • 深入學習Golang并發(fā)編程必備利器之sync.Cond類型

    深入學習Golang并發(fā)編程必備利器之sync.Cond類型

    Go?語言的?sync?包提供了一系列同步原語,其中?sync.Cond?就是其中之一。本文將深入探討?sync.Cond?的實現原理和使用方法,幫助大家更好地理解和應用?sync.Cond,需要的可以參考一下
    2023-05-05
  • Go全局異常的實現示例

    Go全局異常的實現示例

    在Go項目開發(fā)中,有效的異常處理是確保程序健壯性和穩(wěn)定性的關鍵因素之一,全局異常處理機制能夠統(tǒng)一處理項目中可能出現的各種異常情況,下面就來介紹一下Go全局異常,感興趣的可以了解一下
    2025-08-08
  • go循環(huán)依賴的最佳解決方案

    go循環(huán)依賴的最佳解決方案

    ? import cycle not allowed(循環(huán)依賴不被允許)相信作為每一個golang語言使用研發(fā),都遇到過這個令人頭痛的報錯,循環(huán)依賴是指兩個或多個模塊之間互相依賴,形成了一個閉環(huán)的情況,本文會結合部分案例對解決方案進行講解,需要的朋友可以參考下
    2023-10-10
  • golang如何實現mapreduce單進程版本詳解

    golang如何實現mapreduce單進程版本詳解

    這篇文章主要給大家介紹了關于golang如何實現mapreduce單進程版本的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-01-01
  • Golang中漏洞數據庫的使用詳解

    Golang中漏洞數據庫的使用詳解

    govulncheck是Golang中的漏洞掃描工具,它強大功能的背后,離不開?Go?漏洞數據庫(Go?vulnerability?database)的支持,所以本文就來為大家詳細講解下?Go?漏洞數據庫相關的知識
    2023-09-09

最新評論

靖安县| 武隆县| 新干县| 岳池县| 巨野县| 建湖县| 侯马市| 堆龙德庆县| 宾阳县| 海淀区| 临朐县| 丹棱县| 大理市| 白朗县| 碌曲县| 元阳县| 阜新| 和顺县| 繁昌县| 湄潭县| 天柱县| 金塔县| 钟山县| 丰都县| 古丈县| 天台县| 白沙| 三亚市| 舟山市| 定西市| 乡城县| 顺昌县| 克拉玛依市| 荣成市| 台江县| 信阳市| 大同县| 安溪县| 西昌市| 北川| 奉化市|