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

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

Cgo 可以調(diào)用在另一個目錄中聲明的 C 函數(shù)嗎?

Cgo 可以調(diào)用在另一個目錄中聲明的 C 函數(shù)嗎?

Go
幕布斯7119047 2022-01-17 18:38:40
似乎我不能使用 Cgo 調(diào)用在另一個目錄而不是當(dāng)前 Go 包中聲明的 C 函數(shù)。所有文件的代碼:// TestGoCallOC.gopackage main/*#include "test.h"#cgo CFLAGS: -x objective-c#cgo LDFLAGS: -framework Foundation*/import "C"import (    "fmt")func main()  {    fmt.Println(C.fortytwo())}// test.h#include <stdio.h>#include <stdlib.h>int fortytwo();// test.m#include "test.h"int fortytwo() {    return 42;}如果我將所有文件放在一個目錄中:|--src   |--TestGoCallOC      |--TestGoCallOC.go      |--test.h      |--test.m并運行 Go main 函數(shù),這兩個 C 函數(shù)可以被調(diào)用。但是,如果我將 C 文件(實際上它們是 Objective-C 文件)放在另一個目錄中:|--src   |--TestGoCallOC      |--TestGoCallOC.go   |--SomeOCCodes      |--test.h      |--test.m,將前導(dǎo)中的文件路徑改成#include "test.h"絕對路徑,運行Go main函數(shù),這兩個C函數(shù)調(diào)用不了。錯誤信息是架構(gòu) x86_64 的未定義符號:“_fortytwo”,引用自:TestGoCallOC.cgo2.o 中的 __cgo_b3674ecbf56b_Cfunc_fortytwo(也許您的意思是:__cgo_b3674ecbf56b_Cfunc_fortytwo)ld:未找到架構(gòu) x86_64 的符號 clang:錯誤:鏈接器命令失敗,退出代碼 1(使用 -v 查看調(diào)用)退出狀態(tài) 2我做錯什么了嗎?還是Cgo沒有能力做到這一點?
查看完整描述

1 回答

?
子衿沉夜

TA貢獻1828條經(jīng)驗 獲得超3個贊

根據(jù)https://golang.org/cmd/cgo/

包中的所有 cgo CPPFLAGS 和 CFLAGS 指令被連接起來并用于編譯該包中的 C 文件。包中的所有 CPPFLAGS 和 CXXFLAGS 指令被連接起來并用于編譯該包中的 C++ 文件。程序中任何包中的所有 LDFLAGS 指令都在鏈接時連接并使用。所有 pkg-config 指令被連接起來并同時發(fā)送到 pkg-config 以添加到每個適當(dāng)?shù)拿钚袠?biāo)志集。


Go 包邊界是 src 文件夾,因此您可以將所有 c 文件放在同一文件夾中/或使用包含 C 文件(不是 h 文件)解決方法,如下所示:


// main.go

package main


//#include "../ctest/test.c"

import "C"

import "fmt"


func main() {

    r := C.Add(10, 20)

    fmt.Println(r)

}

和 ctest 目錄中的 c 文件:


//test.c


int Add(int a, int b){

    return a+b;

}

這很好用。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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