makeによるビルドができない。
はじめに
現在、Rui Ueyamaさんが公開していただいている『低レイヤを知りたい人のためのCコンパイラ入門』を読ませていただいております。
(※Rui Ueyamaさんの『低レイヤを知りたい人のためのCコンパイラ入門』は、書籍化されているのでしょうか?)
そこで読んでいる最中に、はまった事に対して備忘録代わりに記事として残して行こうと思いました。
問題
目次上の「電卓レベルの言語の作成」の「ステップ1:整数1個をコンパイラする言語の作成」の終盤の内容である「makeによるビルド」で、Makefileを作成したが、makeコマンドが使えなくて、はまってしまいました。
CentOS上のシェルでの出来事
”””
[hogehoge@localhost 9cc]$ make
cc -std=c11 -g -static 9cc.c -o 9cc
/usr/bin/ld : -lc が見つかりません
collect2 : エラー : ldはステータス1で終了しました
make : *** [9cc] エラー 1
”””
と表示され、makeコマンドを使用できませんでした。
(※この時、-lcが何を示すものか分かっていません。そして今も、十分には理解できていません。)
バージョン
解決策
エラーメッセージで、-lcが見つかりませんとなっていたので、
CentOSのシェル上で、
「yum install glibc-static.x86_64」とコマンドを打ち、glibc-static.x86_64をイントールを行ったところ、makeコマンドを使用する事が可能になった。
(glibc-static.x86_64以外にも、glibc-devel.x86_64、glibc-static.i686、glibc-utils.x86_64などがあったが、2020/7/20現在違いはわかっていません。これから調べます。。。)
現時点で不明な事や知りたい事
- Rui Takyamaさんの記事の内容では、makefileの「-static」オプションを消すとリンカが自動でダイナミックリンクになり、ダイナミックリンクを行うには、ダイナミックリンクを行うためのアセンブルのコードが必要と記述されていたが、私の場合、「-static」を消す事でmakeコマンドが使用する事が可能となっていた。(glibc-static.x86_64のイントールを行う前の出来事です。)
- -lcとは何なのか?少し調べてみたところ「よく使われるC言語関数」がライブラリになったものらしいです。(たなか としひささんの記事を参照)
最後に
わからないことだらけで申し訳ありません。
これから先、書物や記事を読みながら調べていこうと思います。
参考資料