g++ を使用して初めて cpp ファイルをコンパイルしたとき、未定義の参照エラーが報告されました。カスタム クラス内のすべての関数が見つかりませんでした。情報を検索した後、呼び出されたクラスをリンクする必要があることがわかりました。この記事では、小さな例を使用してコンパイル プロセスについて説明します。 class2 クラスは class1 クラスのメンバー関数を呼び出し、class1 クラスに依存しますが、テスト ファイルは class2 クラスのメンバー関数を呼び出し、class1 クラスに依存します。 //クラス1.h #ifndef _CLASS1_H #define _CLASS1_H クラス クラス1 { 公共: 整数 i を整数 f に変換します。 }; #終了 //クラス1.cpp #include<iostream> #include "class1.h" 名前空間 std を使用します。 int クラス1::f(int i) { (i==0 || i==1)の場合 1 を返します。 それ以外 f(i-1)+f(i-1) を返します。 } //クラス2.h #ifndef _CLASS2_H #define _CLASS2_H #include "class1.h" クラス クラス2 { 公共: 整数 double_f(int i); }; #終了 //クラス2.cpp #include<iostream> #include "class2.h" 名前空間 std を使用します。 int クラス2::double_f(int i) { クラス1c; 2*cf(i) を返します。 } //テスト.cpp #include<iostream> #include "class2.h" 名前空間 std を使用します。 int メイン() { クラス2 c2; cout << c2.double_f(4) <<endl; 0を返します。 } まず、class1、class2、テストファイルを.o形式のファイルにコンパイルします。 g++ -c クラス1.cpp g++ -c クラス2.cpp g++ -c テスト.cpp class1とclass2は依存関係にあるため、リンクするには静的ライブラリファイル(.a形式)にパッケージ化する必要があります。 ar -rc クラス1.a クラス1.o ar -rc クラス2.a クラス2.o 最後のステップは、test.oを実行ファイルにリンクすることです。 g++ -o テスト test.o クラス2.a クラス1.a 実行後、実行可能ファイル test が取得され、./test コマンドを使用して実行できます。リンクするときは、静的リンク ライブラリの順序に注意してください。前後の依存関係の順序を確保する必要があります。たとえば、ここでは、test は class2 に依存し、class2 は class1 に依存しています。リンクするときは、test を calss2 の前に記述し、class2 を class1 の前に記述する必要があります。そうしないと、未定義の参照エラーが発生します。 g++ で複数のファイルを同時にコンパイルする方法 この例では、ファイルは /CPPPFrtory ディレクトリに配置されます。 CD コマンドを使用して、ソース ファイルを含むフォルダーに移動します。 方法 1: g++ Hello.cpp Welcome2.cpp -o Welcome2.out -ansi // 2 つの cpp ソース ファイル、コンパイル後に 1 つの .out ファイルのみが生成されます 方法 2: 「ワイルドカード」を使用してプログラムをコンパイルします。次のように入力します: g++ *.cpp -o Welcome2.out -ansi // * を使用して、ディレクトリ内のコンパイルされるすべてのファイルを置き換えます 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: Node.jsはSTMPプロトコルとEWSプロトコルに基づいてメールを送信します
>>: MySql のスロークエリ分析とスロークエリログの開き方の詳細説明
いろいろ苦労した後、インターネットで検索したり、以前の会社のプロジェクトを探したり、他の人のプロジェ...
1. インストールスクリプト(composer-setup.php)を現在のディレクトリにダウンロー...
ステップ1: Stowをインストールするこの例では CentOS を使用しているため、拡張 EPEL...
目次準備する5つの武器…のためにオブジェクト.キーオブジェクト.getOwnPropertyName...
注: 親コンテナーに高さと :data='Array' および overfolw:h...
たとえば、新しいテーブルを作成したり、既存のテーブルのデータを更新したりすると、これらのイベントは、...
MySQL のページングステートメントの使用制限Oracle や MS SqlServer と比較す...
Linux ファイルシステム一般的なハードディスクは上図のとおりです。各ディスクは複数のトラックに分...
html <!DOCTYPE html> <html lang="ja&...
目次1. appIDの申請と設定1. appidの取得方法2. AppIDの設定2. 基本的なユーザ...
目次序文1. オブジェクト構築にプロトタイプを設定する1.1 __proto__ の使用における特殊...
この記事では、タブ切り替えの虫眼鏡効果を実現するためのVueの具体的なコードを例として紹介します。具...
序文MySql で主キーの競合または一意キーの競合が発生した場合、挿入方法に応じてエラーを回避するた...
序文最近のプロジェクトでは、大量のデータを保存する必要があり、このデータには有効期限があります。クエ...
この記事では、携帯電話のプルダウンリフレッシュを模倣したjsの具体的なコードを参考までに共有します。...