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

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

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

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

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

include

あるファイルで定義された関数や処理を、別のファイル上でも使用できるようにするプロセスをincludeと呼びます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1770閲覧

【C】自作ファイルのincludeがうまくいかない

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

include

あるファイルで定義された関数や処理を、別のファイル上でも使用できるようにするプロセスをincludeと呼びます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/12/20 09:03

編集2021/12/20 09:15

main.cにsum.hをincludeしようとしています。sum.hが読み込めないとerrorができてしまいます。どのような処理をしたら直せるのでしょうか?

vscodeのcode runnerで実行しています。

発生している問題・エラーメッセージ

Undefined symbols for architecture x86_64: "_sum", referenced from: _main in main-dc6400.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation)

該当のソースコード

main.c↓

#include "sum.h" #include <stdio.h> int main(void) { int value = 10; value = sum(50, 100); printf("%d\n", value); return 0; }

sum.h↓

int sum(int min, int max);

sum.c↓

int sum(int min, int max) { int num; num = (min + max) * (max - min + 1) / 2; return num; }

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

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

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

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

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

guest

回答2

0

ベストアンサー

main.cからsub.cの中にある関数を呼び出しているので、それとのリンクが必要です。

1コマンドでコンパイルする場合:
gcc main.c sum.c

別々にコンパイルする場合:

sh

1gcc -c main.c 2gcc -c sum.c 3gcc main.o sum.o

すでに回答が付いている通り、#includeとは何の関係もないエラーです。

投稿2021/12/20 09:28

otn

総合スコア85901

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

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

退会済みユーザー

退会済みユーザー

2021/12/20 09:40

gcc main.c sum.cを実行した後code runnerで実行すると同じエラーが出てきてしまいます、、、、
otn

2021/12/20 09:55

> gcc main.c sum.c で作ったプログラムを実行するには、ターミナルから、gcc main.c sum.c に続けて、 ./a.out です。 Windowsの場合は、 a.exe です。
退会済みユーザー

退会済みユーザー

2021/12/20 10:04

ありがとうございます。./a.outで実行したらできました! 分割ファイルはcode runnerでの実行はできないのでしょうか?
otn

2021/12/20 10:18

「同じディレクトリにあるCファイルを全部1つまとめにコンパイル」で良ければ、 code runner設定ファイルのgccのコマンドラインの部分を gcc *.c に書き換えれば出来るようです。 「同じディレクトリに別のCファイルもたくさんあるが、main.c から呼んでいるのはsum.cだけなので、main.c と sum.c だけをコンパイルしたい」は、かなり無理。
退会済みユーザー

退会済みユーザー

2021/12/20 10:20

ありがとうございます。特定のファイルだけ実行したい場合はcode runnerは使えないのですね。大変勉強になりました。
otn

2021/12/20 10:26

「プログラム構造を解析して必要なファイルを選び出して、そのファイルに対してgccを実行する」というプログラムを作って、 それをcode runnerから呼び出せば良いので、誰か作ってるかも。
退会済みユーザー

退会済みユーザー

2021/12/23 08:04

ありがとうございます!
guest

0

clang: error: linker command failed with exit code 1 (use -v to see invocation)

これはリンカのエラーです
includeの問題じゃありません。

投稿2021/12/20 09:10

y_waiwai

総合スコア88042

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

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

退会済みユーザー

退会済みユーザー

2021/12/20 09:22

うまくmain.cとsum.hがリンクできてないってことですね。 Undefined symbols for architecture x86_64 のx86_64ってどこのこと指してるんでしょうか?
y_waiwai

2021/12/20 09:26

それは気にしなくていいです。 コンパイラが前提としているx86_64の環境ではその名前の関数が見つからない、といってるだけですから。
退会済みユーザー

退会済みユーザー

2021/12/20 09:37

見つからないということはsum.cをコンパイルされていないということでしょうか? gcc main.c sum.c -o mainをしても特に変わりませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問