問題タブ [cgo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3680 参照

go - Go への既存の C コードの統合。unsigned char poiner の結果を []byte に変換する

簡単な例を次に示します。

その結果、私はこのようなものを持っています

へのポインタdata、の最初の文字、dataおよびサイズ。dataしかし、できればgoコードで使用する[]バイト型として、実際の値を取得するにはどうすればよいですか?
言い換えれば - に変換する方法unsigned char *[]byte

0 投票する
1 に答える
502 参照

go - GoLang / CGO: Go から Mach API host_statistics() を呼び出す際の問題

次の C コード フラグメントを使用して、OS X の CPU 負荷を取得します。

cgo チュートリアルを読んだ後、このコードを Go に移植しようとしました。結果のコードは次のようになります。

ただし、コードをビルドしようとすると、次のエラー メッセージが表示されます。

cgo がタイプについて不平を言う理由がわかりません。host_statistics() の署名は、mach ヘッダーで次のように定義されています。

0 投票する
1 に答える
978 参照

c - C 定数での Cgo リンカー エラー

cgo を使用して C ライブラリをラップしていますが、奇妙な一連のリンカー エラーが発生しました。問題を次のように要約しました。

ファイル header.h には次の内容が含まれます

そして test.go が含まれています

実行するgo run test.goと、次のエラーが表示されます。

これについて 2 つの質問があります。

  1. リンカーが定義済みの定数と関係があるのはなぜですか?
  2. 、、が未定義として表示されるのに、そうでないのCONSTANT1はなぜですか?CONSTANT3CONSTANT4CONSTANT2

前もって感謝します。

*編集: 他の値 (int など) として定義された定数は正常に機能します。

*Edit2: go バージョン go1.1.2 linux/amd64 を使用

*Edit3: 失敗の完全な例:

私は C OpenLDAP ライブラリを使用しており、LDAP_SASL_SIMPLE定数を使用したいと考えています。それは次のように定義されldap.hています

LDAP_SASL_NULL定数は同じエラーを返します。

最小限のデモ用 go プログラム:

0 投票する
2 に答える
5038 参照

go - cgo パッケージのコンパイル時に go build が C 標準ライブラリを見つけられない

ラズベリーパイでgoプロジェクトをコンパイルしようとしています。

プロジェクトには 5 つのファイル、2 つの小さな.cファイルとそれに対応するファイル (これらのファイルの 1 つは私のコード.hです。もう 1 つは base64 ライブラリ.goを呼び出します) と、 ..ccgo

ラズベリーパイで単独でCコードのみ(その呼び出しとすべてを含む)をコンパイルすると、gcc構成なしでうまく機能します。

x86Linux Ubuntu マシンでgo プロジェクト全体をコンパイルするとgo build、かなりうまくいきます。

しかしgo build、ラズベリー pi で go プロジェクトをコンパイルしようとすると、C ライブラリが取得されません。

<stdlib.h>(問題が発生する前に置くと<math.h>、問題はmath.hがないことではないと思います)私は次のことを試みました:

  • ファイル// #cgo CFLAGS: -I/usr/includeに追加.go
  • 追加// #cgo LDFLAGS: -I/usr/include(これらのフラグの正しい使い方がわかりません)
  • 使用するgo build -ldflags '-I/usr/include'

go が base64.c を でコンパイルしようとする理由がわかりません-I /usr/lib/go/pkg/linux_arm。本当にしないでください。誰か助けて。

編集:プロジェクトの構造に関する注意を明確にする:

2 つの C (および対応する H) の 5 つのファイルがあります。

base64.c

project.c

そして1ゴー:

このことを機能させるには、この宣言のどこを、何を、どのように変更する必要がありますか? そして、なぜ私のx86 Linuxで動作したのですか?

0 投票する
3 に答える
11096 参照

go - 構造体と構造体の配列を Go から C 関数に渡す

この問題で立ち往生。渡された構造の最初のメンバーのみを取得できます...何が間違っていますか? Go から C に構造体を渡す正しい方法は何ですか?

これがうまくいかない私の例です:

0 投票する
1 に答える
932 参照

c - mmap バッファからファイル ハンドルへ

ファイル記述子(をサポートする)を「偽造」する必要があり、fstatこのようにします。

ファイル ハンドルへの書き込みがコメント アウトされている場所がわかります。

割り当てられた領域にバッファーを書き込まないと、空になります。mmapと組み合わせてMAP_FIXED、提供されたバッファーのアドレスを使用して、コンテンツをその領域にマッピングすることを望んでいました。

write呼び出しがコピーされるため、メモリ使用量が2倍になると思います。私は本当にしなければならないのwriteですか?

0 投票する
1 に答える
763 参照

go - Go で可変長 C 関数を使用する

私はshm_opencgo で使用します。shm_openLinuxでは3つの引数で定義されています

一方、OSX (Darwin) では、3rd モード フラグはオプションです。

これにより、OSX でモードを渡そうとすると、CGO で問題が発生します。2つしか期待されていないのに、3つの引数を渡すと不平を言います。

どうすればこれを回避できますか?

0 投票する
1 に答える
1334 参照

garbage-collection - CGoを使用してCコードからGo変数への参照を保持する安全な方法はありますか?

CGo を使用して C コードと Go をインターフェイスする場合、C 側で Go 変数への参照を保持している場合、そのオブジェクトがガベージ コレクターによって解放されるリスクがありますか?それとも GC は、によって管理される変数内のポインターを認識しますか? C面?

私が求めていることを説明するために、次のサンプル プログラムを検討してください。

行くコード:

C コード:

との呼び出しfoo->chの間にガベージ コレクターによって解放されるリスクがありますか? もしそうなら、C側からGo変数を固定して、参照を保持している間に解放されないようにする方法はありますか?foo_newfoo_send