ホームページ  >  記事  >  バックエンド開発  >  cgoでコンパイルできない

cgoでコンパイルできない

WBOY
WBOY転載
2024-02-09 16:21:091214ブラウズ

cgoでコンパイルできない

php エディター Baicao は、コードを作成するときにいくつかの問題や課題に遭遇することがよくあります。よくある問題の 1 つは、cgo でコンパイルするときに、「cgo ではコンパイルできません」というエラー メッセージが表示されることです。この問題は、依存ライブラリの欠落、環境構成の誤りなど、さまざまな理由によって発生する可能性があります。この問題を解決するには、コードと環境を注意深く検査し、特定の状況に基づいて適切な調整と修正を行う必要があります。この記事では、誰もがこの問題を克服できるように、この問題を解決するためのいくつかの方法とテクニックを紹介します。

質問内容

goのバージョン(goバージョン)は何をお使いですか?

リーリー

プロジェクト構造:

リーリー

main.go

リーリー

lib/lib.c

リーリー

lib/lib.h

リーリー

コンパイル中のエラー

リーリー

コードが正常にコンパイルされると期待していましたが、どういうわけか正常にコンパイルされませんでした。ドキュメントを正しく読めば、lib.clib.hmain.go ファイルと同じディレクトリに保存する必要があります。しかし、これが可能かどうか、それとも私が何か間違っているのかどうかはわかりません。

  • すべてのファイルを同じディレクトリに保存すると、コンパイルは成功します。

  • lib.clib.h をサブディレクトリに保存するとコンパイルが失敗します

  • main.go から関数 f32_123 を削除すると、コンパイルも成功しますが、これは奇妙なことです。そのため、なぜこのエラーが発生するのかをよりよく理解するために、このエラーを開いたのです。 ##lib.h および lib.c がサブディレクトリにある場合、コンパイル時の printc 関数に問題があります。

解決策

まず第一に、@jimbは少し前にこの承認された回答を提供しました:

https://www.php.cn/link/50c57f7019bb52cfbebdfe5bdc42b422 を示しますサブディレクトリにオブジェクトやライブラリを構築することは、 a>go build では実行できないことです。

これを踏まえて、次の構造があると仮定します:

リーリー

わかりやすくするために、より単純なファイルをいくつか示します:

リーリー リーリー

つまり、次のような

main.go がある場合は、go build main.go: からすべてをビルドできます。 リーリー

これが機能するのは、実際に

#ライブラリの「c」ソース コードを #インクルードしているためです (lib/lib.h ファイルを暗黙的にインポートしています)。

ただし、より複雑なライブラリの場合は、別個のより通常の C ツールチェーンとしてビルドする必要がある場合があります。ビルド前の手順は次のとおりです。

リーリー

次に、別の go ファイルを使用します:

main2.go: リーリー

以上がcgoでコンパイルできないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。