Closed m1goh closed 1 year ago
以下のように同じフォルダに main.go と main.c を配置して go build を行うと同時にビルドされます。 C ソースを別でビルドする必要はないです。
$ ls
go.mod main.c main.go
$ go build
あるいは go run .
でも実行出来ます。
.
が必要なので注意してください。
$ go run .
hello from cPrint
hello from goPrint
上のリンクで紹介されている方法は、 -buildmode=c-archive
でアーカイブを作ってから、
gcc でリンクするやり方となっていて、例えば Windows ではサポートされていません。
(今もサポートされていないはず)
教えていただいた方法で実行できました。面白かったです、ありがとうございました。
C言語からGoの関数を呼び出してみたかったので P.96とP.97のサンプルを入力してmain.cをgccでコンパイルすると
akiyoshi@LAPTOP-JPBE28JN:~/tinygobook/chapter031004$ gcc main.c /usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function
_start': (.text+0x24): undefined reference to
main' /usr/bin/ld: /tmp/ccQeVZ4a.o: in functionCPrint': main.c:(.text+0x1a): undefined reference to
goPrint' collect2: error: ld returned 1 exit status akiyoshi@LAPTOP-JPBE28JN:~/tinygobook/chapter031004$このようにエラーになりました。
インターネットでC言語からGo言語の関数を呼ぶ方法というのを見付けました。 https://blog.takuchalle.dev/post/2020/05/14/call_go_function_from_c/ こちらによると、Goでコンパイルしてから、gccでコンパイルしているようです。
P.96のmain.goとP.97のmain.cをコンパイルして実行する、コンパイルの仕方を教えていただけないでしょうか? よろしくお願いします。