●学校情報

講座一覧・募集状況

学習方法

学習サポート

修了生の評価

受講生の横顔

当学院について

入学相談

入学手続

 

●講座情報

技術者養成講座

プログラミング講座

WEB講座

情報処理試験講座

Excel講座

Access講座

 

●関連コラム

関連コラム

関連用語集

 

logo

 

 

関連用語集

C++のリンク(Link)とは?コンパイルとの違いとエラー対策を解説!

C++でプログラムを書くとき、「コンパイルは通ったのに動かない」という経験をしたことはありませんか? それは「リンク(Link)」の段階でエラーが起きている可能性があります。

この記事では、リンクの意味や役割、リンクエラーの原因と対策について、初心者向けにわかりやすく解説します。

リンク(Link)とは?

リンクとは、コンパイルされた複数のオブジェクトファイルやライブラリを1つの実行ファイルにまとめる処理のことです。 この処理を行うソフトウェアを「リンカ(Linker)」と呼びます。

ビルドの流れ(簡略版)

  1. プリプロセス#include#define の処理
  2. コンパイル:各ソースファイルを機械語に変換(*.o や *.obj)
  3. リンク:オブジェクトファイルやライブラリを1つに結合(*.exe など)

つまり、リンクは「部品を組み立てる作業」とも言えます。

リンクが必要な例

複数のソースファイルに分けて開発していると、リンクが必要になります。

// main.cpp
void hello();

int main() {
    hello();
    return 0;
}

// hello.cpp
#include <iostream>
using namespace std;

void hello() {
    cout << "Hello, world!" << endl;
}

この場合、main.cpphello.cpp をそれぞれコンパイルし、最後にリンクして結合する必要があります。

g++ main.cpp hello.cpp -o hello

リンクエラーの例と原因

エラー例原因
undefined reference to `関数名`関数の定義が見つからない
multiple definition of `関数名`同じ関数が複数定義されている
ライブラリが見つからない-lオプションでライブラリの指定忘れ

リンクエラーは関数や変数の定義不足、重複、外部ライブラリ未指定が原因になることが多いです。

外部ライブラリのリンク例

// mathライブラリ(-lm)のリンク
g++ calc.cpp -o calc -lm

ライブラリのリンクには -l(小文字のエル)オプションを使います。

静的リンクと動的リンク

種類特徴
静的リンク必要なコードを実行ファイルに埋め込む(大きくなるが独立)
動的リンク外部ファイル(DLLなど)に依存(軽いが実行時に必要)

まとめ

C++のリンク(Link)は、コンパイルされたファイル同士を結合して最終的なプログラムを作る工程です。 関数や変数が複数ファイルに分かれているときは、正しいリンクが必要になります。

リンクエラーが出たら「定義が漏れていないか」「ライブラリの指定が正しいか」をチェックしてみましょう!

 

C++関連用語集

−−−−−  C++  −−−−−

C++のクラス(Class)とは?仕組みと使い方をわかりやすく解説!

C++のオブジェクト(Object)とは?クラスとの関係と役割をわかりやすく解説!

C++のコンストラクタ(Constructor)とは?役割と使い方をやさしく解説!

C++のデストラクタ(Destructor)とは?役割と使い方をやさしく解説!

C++の継承(Inheritance)とは?クラスを拡張する基本テクニック

C++の多態性/ポリモーフィズム(Polymorphism)とは?オブジェクト指向の真髄を解説!

C++のオーバーロード(Overload)とは?関数や演算子を便利に使い分けよう!

C++のオーバーライド(Override)とは?継承と仮想関数の正しい使い方

C++の仮想関数(Virtual Function)とは?ポリモーフィズムを実現する仕組みを解説!

C++の純粋仮想関数(Pure Virtual Function)とは?抽象クラスとの関係も解説!

C++の抽象クラス(Abstract Class)とは?使い方と役割をわかりやすく解説!

C++のテンプレート(Template)とは?型に依存しない汎用的な関数・クラスを作ろう!

C++の名前空間(Namespace)とは?名前の衝突を防ぐ便利な機能

C++の標準テンプレートライブラリ(STL)とは?効率的な開発に必須のライブラリ群

C++のベクター(vector)とは?配列より便利なSTLコンテナを使いこなそう!

C++のイテレータ(Iterator)とは?STLコンテナを自在に操作する鍵

C++の参照(Reference)とは?ポインタとの違いもわかりやすく解説!

C++のポインタ(Pointer)とは?メモリを操る強力な機能をやさしく解説!

C++の動的メモリ確保(Dynamic Memory Allocation)とは?newとdeleteを使いこなそう

C++のnew/delete演算子とは?動的メモリ確保の基本をマスターしよう!

C++の例外処理(Exception Handling)とは?try/catch/throwでエラーに強いプログラムを作ろう

C++のtry/catch構文とは?例外処理の基本をやさしく解説!

C++のRAIIとは?リソース管理を自動化する重要な設計原則

C++の静的変数(static variable)とは?使い方・特徴・注意点をやさしく解説!

C++の関数ポインタ(Function Pointer)とは?使い方と活用例をわかりやすく解説!

C++のラムダ式(Lambda Expression)とは?書き方・使い方をやさしく解説!

C++のスマートポインタ(Smart Pointer)とは?自動で安全なメモリ管理を実現しよう!

C++のコンパイル(Compile)とは?仕組みと流れをわかりやすく解説!

C++のリンク(Link)とは?コンパイルとの違いとエラー対策を解説!

C++のプリプロセッサディレクティブとは?#include や #define の意味と使い方