2025年1月31日金曜日

Go言語入門(3)

 

興味本位でGo言語に触れてみようと思う。Linuxで32bit実行ファイルを生成して32bit shared libraryを呼び出すってしてみる。


まず32bit shared libraryを生成せんと動作確認できないので、32bit shared libraryつくる。まずは32bitでビルドできる環境を用意せんといかんのだが、
sudo apt-get install gcc-multilib
sudo apt-get install g++-multilib
でいいらしい。
で、コンパイルとリンク時に-m32をオプションとして与えんといかんので、Makefileをいじる
Makefile
  1. CC = gcc
  2. CFLAGS = -m32 -fPIC -O4 -Wall -I/usr/local/include
  3. LDFLAGS+= -m32 -shared -Wl,--version-script,libkeeloq.map
  4. #LDFLAGS= -shared -static-libgcc -static-libstdc++ -Wl,--version-script,libkeeloq.map -o libkeeloq.so
  5. libkeeloq.so: keeloq.o
  6.     $(CC) keeloq.o $(LDFLAGS) -o libkeeloq.so
  7.  
  8. keeloq.o: keeloq.c
  9.     $(CC) $(CFLAGS) keeloq.c -c -o keeloq.o
  10.  
  11. clean:
  12.     rm keeloq.o libkeeloq.so
で、make
make clean
make
で、テスト用コードをコンパイルして実行。
rm a.out
gcc -m32 keeloq_call.c
./a.out
と、こうなる
ので、実行できてるんやけど、これが本当に32bitかどうか、、、
file -e elf a.out
file -e elf libkeeloq.so
ってやればいいらしい。で、
こうなるので、うまくいっているはず。
で、Goで32ビットアプリを生成するには、、、これが、なかなかわからんかったけど、こうやる
CGO_ENABLED=1 GOOS=linux GOARCH=386 go run callshared32.go
GOOSとGOARCHを設定するってのはすぐに見つかるんだけど、CGO_ENABLEDはなかなか見つからんかった。これ指定しないと、
go: no Go source files
っていう本当に理解できないエラーが返される。、、、こんなんダメやろって思うんやけど、、、
で、こうなる。
buildもしてみる。
まぁ、うまくいっているね。
Goはクロスコンパイルが簡単だってどっかに書いてあったけど、なぞの呪文系は情報が錯綜しがちなのでやっかいなんよね、、、

そういっても、モノ相手なので、いつか解決してスッキリする。ヒト相手に困惑するのよりぜんぜん平気。エブリデーエンジニアになりたい。

0 件のコメント:

コメントを投稿