質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

Q&A

解決済

2回答

2454閲覧

windowsでcgoのエラー「"conio": Unknown word.」 「"kbhit": Unknown word.」

owl_ddbb

総合スコア7

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

0グッド

0クリップ

投稿2021/02/07 07:42

編集2021/02/08 01:10

windows10でcgoをつかいたいのですがコードはこのように書いています。
エラーが出てしまっていて
「"conio": Unknown word.」
「"kbhit": Unknown word.」
と出てしまいます。
どうしてでしょうか?
ご回答宜しくお願い致します。

package tetris //#include <conio.h> import "C" import ( "fmt" "time" ) // メインループ func mainLoop() { // ループミリ秒 var loopms time.Duration = 33 // タイマ作成 timer := time.NewTimer(loopms * time.Millisecond) // メインループ for { select { case <-timer.C: timer = time.NewTimer(loopms * time.Millisecond) // 入力 // C言語の関数を使用 str := "" if C._kbhit() != 0 { str = string(C._getche()) fmt.Printf(str) } else { fmt.Printf(".") } break } } } // メイン関数 func main() { mainLoop() }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nobonobo

2021/02/07 14:54 編集

どういう操作時にどんなエラーメッセージが出たのか、また、エラーメッセージを省略しないで極力全文貼ってください。おそらく他に重要なメッセージが出てるんじゃないかなと予想します。 また、CGOはC資産に不慣れなら使わない事をお勧めしたつもりです。 このエラーの対処が想像出来ないなら以前勧めたコードでどうぞ。 あくまでCGOの使い方をマスターしたいのならエラーメッセージ全文の追記をお願いします。
nobonobo

2021/02/07 14:56

というかコードの貼り方も修正お願いします。
nobonobo

2021/02/08 01:29

同様の質問: https://teratail.com/questions/319313#reply-444585 こちらに回答した動くであろうコードは試されましたか? 他の方の回答にある通り、WindowsでCGOを扱うにはgccツールチェインのインストールが必要です。 「Cygwin経由」「MSYS2経由」「Mingw-w64」などなど。どのgccツールチェインのインストールをしたのかどうかという情報が欲しいです。 また、質問の動機はなんでしょうか?「キー入力ごとの処理を実現したい」なのでしょうか、「Windows限定でのCGOの使い方を知りたい」なのでしょうか?
owl_ddbb

2021/02/08 01:40

なんども申し訳ございません 以前のコードはコードで実行しましてちゃんと動作しました。ありがとうございました。 この機会にcgoを学ぼうかとおもいまして質問さていただきました。 エラーが間違っていたようです。 c:\go\pkg\tool\windows_amd64\link.exe: running gcc failed: exit status 1 c:/mingw64/bin/../lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld.exe: unrecognized option '--high-entropy-va' c:/mingw64/bin/../lib64/gcc/x86_64-w64-mingw32/4.8.3/../../../../x86_64-w64-mingw32/bin/ld.exe: use the --help option for usage information collect2.exe: error: ld returned 1 exit status
owl_ddbb

2021/02/08 02:00

そのコードは試しました。無事に実行できました。ありがとうございました。 mingw-w64インストールしました。 Windows限定でのCGOの使い方を知りたいです。
nobonobo

2021/02/09 14:40 編集

「c:/mingw64/x86_64-w64-mingw32/bin/ld.exe -V」で表示される以下の様なメッセージを追記ください。 あるバージョンより古い場合は「--high-entropy-va」オプションが使えません。 GNU ld (GNU Binutils) 2.36 Supported emulations: i386pep i386pe
owl_ddbb

2021/02/10 03:52

これでよろしいでしょうか? GNU ld (GNU Binutils) 2.24 Supported emulations: i386pep i386pe
nobonobo

2021/02/10 05:39

binutilsのバージョン=ld.exeのバージョンで2.26にてWindowsのASLR対応である「--high-entropy-va」オプションが使える様になった様です。なので課題はより新しいバージョンのMingw-w64をインストールする方法ですね。
nobonobo

2021/02/10 12:48

上記は何を行おうとした時に出ますか?
guest

回答2

0

ベストアンサー

WindowsでGo1.15以降でCGOを使いたい場合は
セキュリティ要件のためにWindowsのASLR対応のサポートの入った
binutilsのバージョンが2.26以降が必要です。

そのためのインストール推奨手順を列挙すると以下の2ステップが最速です。

  1. PowerShellにてscoop(詳しい手順はリンク先参照)をインストール
  2. コンソールにて「scoop install gcc」

追記

https://github.com/lukesampson/scoop/issues/4250

アンラッキーなことにここ数日インストールできない問題が発生している様です。
改善を待つか、他のインストール方法をお試しください。

例えば「scoop install msys2」しておき、msys2アイコンを起動、
「pacman -Sy gcc」としてmsys2コンソール内Goの開発作業をする。

投稿2021/02/10 07:03

編集2021/02/10 13:19
nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

cgoはその内部でg++動かすんでしたっけ。

であるなら、g++が持ってるヘッダじゃないと扱えなくて、
g++ はconio.hを提供しないのでは? (conio.hってWindows系ですよね?)

投稿2021/02/07 12:23

episteme

総合スコア16612

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問