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

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

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

make は、プログラムのビルド作業を自動化するツールです。コンパイル、リンク、インストール等のルールを記述したテキストファイルをmakefileと呼び、このルールに従ってmakeが自動的にビルドを実行する。

C++

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

Q&A

解決済

1回答

12568閲覧

std::ios_base::Init::~Init()に対する定義がされていない参照です

kemenoko

総合スコア5

makefile

make は、プログラムのビルド作業を自動化するツールです。コンパイル、リンク、インストール等のルールを記述したテキストファイルをmakefileと呼び、このルールに従ってmakeが自動的にビルドを実行する。

C++

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

0グッド

0クリップ

投稿2016/06/24 02:09

編集2016/06/24 02:29

###前提・実現したいこと
複数のC++ファイルをコンパイルするためのmakefileを作成しています.
makefile内でiostreamをincludeしたいのですが,
エラーが出ます.

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

CC -Wall -o build/hogehoge solver/hogehoge/hogehoge.cpp
/tmp/ccKM6Ogx.o:hogehoge.cpp:(.text+0x44): std::ios_base::Init::Init()' に対する定義されていない参照です /tmp/ccKM6Ogx.o:hogehoge.cpp:(.text+0x44): 再配置がオーバーフローしないように切り詰められました: R_X86_64_PC32 (未定義シンボル std::ios_base::Init::Init()' に対して)
/tmp/ccKM6Ogx.o:hogehoge.cpp:(.rdata$.refptr._ZNSt8ios_base4InitD1Ev[.refptr._ZNSt8ios_base4InitD1Ev]+0x0): `std::ios_base::Init::~Init()' に対する定義されていない参照です
collect2: エラー: ld はステータス 1 で終了しました
Makefile:19: ターゲット 'build/hogehoge.o' のレシピで失敗しました
make: *** [build/hogehoge.o] エラー 1

###該当のソースコード
hogehoge.h

header

1#pragma once 2#ifndef __HOGEHOGE__ 3#define __HOGEHOGE__ 4 5#include <iostream> 6using namespace std; 7 8#endif /*HOGEHOGE*/

hogehoge.cpp

cpp

1#include "hogehoge.h" 2 3int main(int argc,char *argv[]){ 4 return 0; 5}

makefile

makefile

1#makefile 2 3#main compiler 4CC := g++ 5#source file extension 6SRCEXT := cpp 7#build directory 8BUILDDIR := build 9#result directory 10RESULTDIR := result 11#solver directory 12SOLVER := solver 13 14#solver file 15META := hogehoge 16 17$(META): $(BUILDDIR)/$(META).o $(SOLVER)/$(META)/$(META).h 18$(BUILDDIR)/$(META).o: $(SOLVER)/$(META)/$(META).cpp 19 CC -Wall -o $(BUILDDIR)/$(META) $(SOLVER)/$(META)/$(META).cpp 20clean: 21 rm -f $(BUILDDIR)/*.o $(BUILDDIR)/*.exe

###試したこと
cppファイルの方でinclude <iostream>を行った場合にもうまくいきませんでした.
###補足情報(言語/FW/ツール等のバージョンなど)
windows8 cygwin

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

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

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

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

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

guest

回答1

0

ベストアンサー

コンパイルエラーですか? リンクエラーですか?
CC -c solver/hogehoge/hogehoge.cpp がエラーにならんならリンクエラー。
リンクエラーなら十中八九ライブラリのリンク忘れなんだけど...

また、makeを使わず g++ solver/hogehoge/hogehoge.cpp ならばちゃんとコンパイル/リンクされるんですか?

makefile中に CC ~.cpp とあるのは $(CC) のマチガイ?

投稿2016/06/24 02:27

編集2016/06/24 02:35
episteme

総合スコア16614

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

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

kemenoko

2016/06/24 02:35 編集

CC -c solver/hogehoge/hogehoge.cpp ではエラーが出なかったので, コンパイルエラーかと思われます. 追加:hogehoge.cpp内のincludeが間違っていたので#include<hogehoge.h>に修正いたしました.
episteme

2016/06/24 02:38

それリンクエラーですって。
kemenoko

2016/06/24 02:39

解決しました! CCを$(CC)にしたところ無事にコンパイルされました! ありがとうございます. makeを使わずに g++ solver/hogehoge/hogehoge.cpp ならばちゃんとコンパイル/リンクされました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問