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

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

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

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

make

make は、ビルド作業を自動化するツールです。さまざまなファイルの最終変更時刻を比較し、従属するファイルよりも「ターゲット」のファイルが古いことがわかったときユーザーが設定していた命令を実行する事が可能です。

Q&A

3回答

2979閲覧

library not found for エラー

cunwe

総合スコア65

C

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

make

make は、ビルド作業を自動化するツールです。さまざまなファイルの最終変更時刻を比較し、従属するファイルよりも「ターゲット」のファイルが古いことがわかったときユーザーが設定していた命令を実行する事が可能です。

0グッド

0クリップ

投稿2020/09/26 16:12

編集2020/09/27 07:13

こちらを見させていただきながらC言語の理解を深めているところです。「ステップ2:加減算のできるコンパイラの作成」のように少し複雑になる前に「ステップ1:整数1個をコンパイルする言語の作成」でmakeコマンドを試したいと思い、実行したら以下のエラーが出ました。

cc -std=c11 -g -static 9cc.c -o 9cc ld: library not found for -lcrt0.o clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [9cc] Error 1

crt0.oというのはこちらの記事によるとmain()より前に走る処理が書いてあるそうでこれが(動的に?静的に?)リンクできないということだと思うのですがどこにどう書き足したら良いでしょうか?ld: library not found for -lcrt0.oで調べたのですがわかりませんでした。
ファイルは以下の通りです。よろしくお願いいたします。

//test.sh #!/bin/bash assert() { expected="$1" input="$2" ./9cc "$input" > tmp.s cc -o tmp tmp.s ./tmp actual="$?" if [ "$actual" = "$expected" ]; then echo "$input => $actual" else echo "$input => $expected expected, but got $actual" exit 1 fi } assert 0 0 assert 42 42 echo OK
//Makefile CFLAGS=-std=c11 -g -static 9cc: 9cc.c test: 9cc ./test.sh clean: rm -f 9cc *.o *~ tmp* .PHONY: test clean
//9cc.c #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv) { if (argc != 2) { fprintf(stderr, "引数の個数が正しくありません\n"); return 1; } printf(".intel_syntax noprefix\n"); printf(".globl main\n"); printf("main:\n"); printf(" mov rax, %d\n", atoi(argv[1])); printf(" ret\n"); return 0; }
//tmp.s .intel_syntax noprefix .globl main main: mov rax, 42 ret

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

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

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

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

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

raccy

2020/09/26 23:59 編集

コンパイラが自動でリンクするライブラリ群はOS・コンパイラ依存が大きいです。ご使用のOSおよびコンパイラの名前、および、バージョンを追記してください。これらの情報が無い場合、現象の再現等ができず、原因の追及や、対応方法の提示をすることができません。 次に、コンパイル環境自体の問題の可能性があります。単純なhollo worldのプログラムを同じオプションでコンパイルするときもコンパイルエラーが発生するのか、また、コンパイラオプションを変えてみるとどうなるのかを確認していただけますでしょうか?
cunwe

2020/09/27 07:19

すいません、その辺りの情報を申し上げておりませんでした。 OS:MacOS Catalina10.15.6 コンパイラ:gcc-10 10.2.0 当方MacなのでDocker上でやりました。
cunwe

2020/09/30 11:29

すいません、こちらまだ解決していません。9cc.cをHello Worldとだけ出力するプログラムにしましたが同じエラーが吐かれます。コンパイラオプションをどのように変えて試すと良いでしょうか?ご教授よろしくお願いいたします。
guest

回答3

0

makeコマンドってコンテナにログインした状態で実行するで合ってますでしょうか?

このチュートリアルでは、テストはLinux環境でないとうまく動作しないので、コンテナ内で実行する必要があります。

投稿2023/08/05 09:53

sahara-ooga

総合スコア2

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

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

0

CFLAGS=-std=c11 -g -static -l/usr/lib
あるいは、 -l/usr/local/lib
とかですかね。

投稿2020/10/11 11:59

hana_yama_san

総合スコア923

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

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

cunwe

2020/10/13 15:22

返信遅くなり申し訳ございません。ご回答いただきありがとうございました。2つとも試しましたが同じエラーが出ました。。
guest

0

Makefile の中に
CFLAGS=-std=c11 -g -static
と書かれているのに、

cc -std=c17 -g -static 9cc.c -o 9cc
となっていることが変です。

makeコマンドを実行する前に、自分で
cc -o 9cc 9cc.c
を実行するとどうなりますか?

または、
cc -std=c11 -o 9cc 9cc.c
ではどうなりますか?

投稿2020/09/27 00:38

kazuma-s

総合スコア8224

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

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

cunwe

2020/09/27 07:21

すいません、17ではなく11でした。(編集しました) cc -o 9cc 9cc.c、cc -std=c11 -o 9cc 9cc.cともに通りました。
cunwe

2020/09/27 07:24

その後もう一度makeを実行するとmake: `9cc' is up to date.と出ました
kazuma-s

2020/09/27 09:03

make clean で 9cc を削除してから、make を実行するとどうなりますか?
cunwe

2020/09/27 13:09

ありがとうございます。make cleanでrm -f 9cc *.o *~ tmp*と表示され、その後makeすると全く同じエラーが出てしまいます。
kazuma-s

2020/09/27 14:16

cc -static -o 9cc 9cc.c も試してみましたか?
cunwe

2020/09/27 16:04

そちらも試しましたが同じエラーが出てしまいます。
cunwe

2020/10/08 15:25

makeコマンドってコンテナにログインした状態で実行するで合ってますでしょうか?
cunwe

2020/10/09 14:00

何かしら反応いただけますと幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問