第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Cgo 未定義引用

Cgo 未定義引用

Go
夢里花落0921 2022-06-21 16:31:42
為什么使用 Cgo 時我的 .go 文件中無法識別 c 函數(shù)?我遵循了所有過程并嘗試了godoc上的示例,它可以工作,但是這個不起作用,是什么原因?文件夾結(jié)構(gòu)libsha.asha.cpp掃碼沙.hmain.go代碼沙.h#ifndef _SHA_H_#define _SHA_H_#include <stdlib.h>#include "TYPE.h"typedef struct {    U32 bits[2];    U32 input[16];    U32 state[5];} SHA_CTX;void SHA_Init(SHA_CTX *ctx);void SHA_Update(SHA_CTX *ctx, U8 *in, int inbytes);void SHA_Final(SHA_CTX *ctx, U8 *out);void KS_SHA(U8 *out, U8 *in, int inbytes);#endifsha.cpp  #include "sha.h"      void SHA_Init(SHA_CTX *ctx)        {            ctx->state[0] = INIT_H0;            ctx->state[1] = INIT_H1;            ctx->state[2] = INIT_H2;            ctx->state[3] = INIT_H3;            ctx->state[4] = INIT_H4;            ctx->bits[0] = ctx->bits[1] = 0;        }main.gopackage main// #cgo LDFLAGS: -L . -lsha// #include "sha.h"import "C"import "unsafe"type CPoint struct {    Point C.struct_SHA_CTX}func main() {    point := CPoint{Point: C.struct_SHA_CTX{}}    C.SHA_Init(point)    defer C.free(unsafe.Pointer(point))}錯誤C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/9.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: $WORK\b001\_x002.o: in function `_cgo_6280fd3fea2a_Cfunc_SHA_Init':/tmp/go-build/cgo-gcc-prolog:49: undefined reference to `SHA_Init'collect2.exe: error: ld returned 1 exit status為什么無法識別 SHA_Init 函數(shù)?
查看完整描述

1 回答

?
慕尼黑的夜晚無繁華

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個贊

您的sha.cpp文件不是C文件,而是C++文件。默認(rèn)情況下,這意味著在編譯時,它不會有 C 鏈接,這意味著 CGo 將無法調(diào)用它。

查看https://stackoverflow.com/a/1041880/2911436以了解有關(guān)默認(rèn)情況下它為何不起作用的更多信息。

解決方案

  1. 如果sha.cpp可以輕松轉(zhuǎn)換為純C文件,那將是最簡單的。對于上面的代碼,只需將其重命名為sha.c似乎對我有用。

  2. 如果這不可行,請查看帖子:如何在 Go 中使用 C++

注意事項:

我必須進(jìn)行一些重構(gòu)才能使其正常工作,因?yàn)槲胰鄙倌拇a示例中使用的許多定義。

  • 我不能用 a 來嘗試這個libsha.a,并且必須重新定義所有U*類型,因?yàn)槲覜]有文件(例如U8-> uint8_t)。

  • SHA_Init除了沒有給出它們的實(shí)現(xiàn)之外,我不得不刪除函數(shù)。

  • 為了編譯,我將所有INIT_H*int重命名為常量。sha.cpp

  • 我在 Mac 上對此進(jìn)行了測試,并使用了clang,但是運(yùn)行您的代碼給了我一個類似的錯誤,所以我相信解決方案會是類似的。


查看完整回答
反對 回復(fù) 2022-06-21
  • 1 回答
  • 0 關(guān)注
  • 431 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號