問題タブ [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.
go - C関数に渡す正しいGo型?
私は C で書いたサーバー コードを Go に移植していますが、暗号化ライブラリを使用しています。代わりに、Cgo を使用してラッパーを記述し、コードの残りの部分がより簡単に呼び出せるようにしようとしています。ライブラリのヘッダーの一部を次に示します。
そして、ここに私が仕事をしようとしている概念実証のスニペットがあります:
ヘッダーにテスト関数 ( int test() { return 1; }
) を定義しましたが、コードから ( を介してC.test()
) 呼び出すことも、 #defined'd 定数 ( ) を参照することも問題ありませんが、 go install goservC.CRYPT_BBCFG
を実行しようとすると次のエラーが発生します。
この時点で、正しい引数で関数を呼び出していないだけだと思います。私は、 cdata は type*C.struct_CRYPT_SETUP
であり、 key は*byte
( & なしでは機能しませんが) である必要があり、 C.CRYPT_BLUEBURST の type...something であるという印象を受けました。やってみC.uchar(CRYPT_BLURBURST)
ても何も変わりません。
このコードをコンパイルするための提案はありますか?
編集: プラットフォームを忘れました。Mac OS X 10.10 を実行しています
Edit2 (解決済み): key の最初の要素のアドレスで unsafe.Pointer を使用することに関する Jsor のポイントは役に立ちましたが、C ソース ファイルを Go ファイルと同じディレクトリに移動する必要もありました。C.CRYPT_DATA の代わりに C.struct_CRYPT_DATA を使用した結果、別の型エラーが発生したため、他の誰かが次のようなエラーに遭遇した場合:
次に、 struct_ プレフィックスを削除します (ただし、cgo ドキュメントでは、C 構造体型を直接参照する方法であると述べています)。
c - C ライブラリとのパッケージ連携を行う
これが基本的な質問であることを願っています。C で記述されたライブラリの関数を含む Go パッケージをビルドしようとしています。構造は基本的に次のとおりです。
go build foo.go
の「未定義の参照」で実行が失敗しますorig_func
。ヘッダーはmybar.h
;であることに注意してください。orig_func
元のライブラリに含まれていなかったプロトタイプを作成しました。Go ビルドにリンクする前に、このヘッダー ファイルを含めてライブラリを最初に再コンパイルする必要がありますか? それとも、何か他のことを完全に誤解していますか?
go - Goにサードパーティパッケージのヘッダーを含める方法は?
私のパッケージワークスペースにgithub.com/yada/yada
サードパーティのパッケージがあるとしましょう。このパッケージ内には、yoda.go.h
再利用したいヘッダーがあります (それが良いアイデアかどうかはわかりませんが、それは穴の新しい質問です)。依存パッケージから自分のパッケージにヘッダーをインポートするにはどうすればよいですか?
良いアイデアかどうかは別として、それが可能かどうかを知りたいです。
PS: 本当に悪い考えだと思うなら、代わりにどうすればいいですか?
go - [1024]C.char を [1024]byte に変換する方法
この C (配列) 型を変換するにはどうすればよいですか。
この Go (配列) タイプに:
? インターフェイス変換をしようとすると、次のエラーが表示されます。
windows - Windows で cgo を使用して Go プログラムのメモリ リークを検出する方法はありますか
cgo を使用して C ライブラリにリンクしたり、Go プロジェクトで C コードを使用したりしていますが、Windows でメモリ リークを検出する方法があるかどうか疑問に思っていました。
apache - golang 型変換ループ - Apache モジュール
Apache モジュール システムへの Go インターフェイスを構築しようとしています。つまり、Apache モジュールから Go 関数を呼び出せるようにしたいのです。これは私のGoファイルです:
ビルドすると ( go build mod_frugal.go
)、次のエラーが発生します。
行 8 は、関数「handler」が始まる行です。助言がありますか?
または、 cgo ( go tool cgo mod_frugal.go
) でビルドすると、インクルード ディレクティブがまったく表示されません。
「C」を追加したとき。2 つの apache 呼び出しにプレフィックスを付けます。
新しいエラーが表示されます:
たぶん、libhttpd に対してリンクする必要がありますか? libhttpdなどのビルドでapache2にリンクすることについて、インターネット上で何も見つけることができません。
編集:
ここでの会話を自由にフォローしてください: