ubuntu20.0.4 vscode配置c++環境,ubuntu下vscode編寫cgo程序

 2023-12-25 阅读 25 评论 0

摘要:CGO顧名思義,是go語言用來調用c函數的工具。如果要使用CGO,首先要先確認一下是否安裝GCC,因為go調用C之前需要將C語言代碼編譯。 本篇博客打算實現一個hello world例子來作為入門的演示。 首先在main包下新建一個hello文件夾。里面有兩個文件hello.c和he

CGO顧名思義,是go語言用來調用c函數的工具。如果要使用CGO,首先要先確認一下是否安裝GCC,因為go調用C之前需要將C語言代碼編譯。

本篇博客打算實現一個hello world例子來作為入門的演示。

首先在main包下新建一個hello文件夾。里面有兩個文件hello.chello.h

其中hello.h代碼如下:

// main/hello/hello.h
void SayHello(const char* s);

hello.c代碼如下:

// main/hello/hello.c
#include <stdio.h>void SayHello(const char* s) {puts(s);
}

將c語言代碼編譯并生成靜態鏈接庫:

gcc -c -o hello.o hello.c
ar rcs libhello.a hello.o

然后編寫go語言的main函數代碼:

// main/main.go
package main//#cgo CFLAGS: -I./hello
//#cgo LDFLAGS: -L${SRCDIR}/hello -lhello
//
//#include "hello.h"
import "C"func main() {C.SayHello(C.CString("Hello, World\n"))
}

注意如下的注釋必須要添加進去:

//#cgo CFLAGS: -I./hello
//#cgo LDFLAGS: -L${SRCDIR}/hello -lhello
//
//#include "hello.h"

import "C"語句前的注釋中可以通過#cgo語句設置編譯階段和鏈接階段的相關參數。編譯階段的參數主要用于定義相關宏和指定頭文件檢索路徑。鏈接階段的參數主要是指定庫文件檢索路徑和要鏈接的庫文件。

上面的代碼中,CFLAGS部分,-I定義了頭文件包含的檢索目錄。LDFLAGS部分,-L指定了鏈接時庫文件檢索目錄,-l指定了鏈接時需要鏈接hello庫。這里面-lhello就是指靜態鏈接庫libhello.a。

go語言代碼在vscode中可能會報錯,但是可以運行。在終端運行如下命令:

go run main.go

就可以得到結果。

在這里插入圖片描述

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/194661.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息