6

わかりました、それでしばらく経ちましたが、#includes に問題があります

だから私はやっている

#include "someheader.h"

しかし、それは私に与えています

fatal error: someheader.h: No such file or directory

これは、システム全体のライブラリです。Arch Linux を実行していて、レポからライブラリをインストールしました。.h ファイルは /usr/include にあると思います。

コードが入っているフォルダーにすべてのヘッダー ファイルをコピーすることもできますが、それはハックになります。

これを行う「正しい」方法は何ですか?

編集: .h ファイルが /usr/include にあると言ったのは正しくありませんでした。つまり、ライブラリ フォルダーがそこにあるということでした。したがって、Emile Cormier の回答はある程度機能しました。現在の問題は、ヘッダーファイルにいくつかのインクルードがあり、アクセスしようとしているメソッドから、それらのインクルードが発生していないようで、エラーが発生していることです

undefined reference to Namespace::Class::method()

編集:わかりましたので、最終的な答えは次のとおりです。

#include <library_name/someheader.h>

そしてコンパイルします

g++ code.cpp -llibrary_name
4

3 に答える 3

9

ライブラリのヘッダー ファイルが にインストールされる/usr/include/library_name場合があるため、次のようにインクルードする必要があります。

#include <library_name/someheader.h>

ファイル マネージャー (またはコンソール コマンド) を使用して、システム上のヘッダー ファイルを見つけ、ヘッダーのファイル名の前にディレクトリ名を付ける必要があるかどうかを確認します。


表示されるundefined referenceエラーはリンカー エラーです。プログラムと一緒に libsynaptics をリンクしていないため、このエラーが発生しています。したがって、リンカーは、使用している libsynaptics 関数の「実装」を見つけることができません。

GCC を使用してコマンドラインからコンパイルする場合は-lsynaptics、libsynaptics ライブラリにリンクするオプションを追加する必要があります。IDE を使用している場合は、リンク先のライブラリを指定してシナプスを追加できる場所を見つける必要があります。メイクファイルを使用している場合は、リンカー フラグのリストを変更して、-lsynaptics.

また、-L <path_to_library>検索パスのフラグを追加する必要があるため、標準のリンカー検索パスのいずれかにインストールされていない限り、リンカーはライブラリを見つけることができます。

GCC を使用したライブラリへのリンクに関するこのチュートリアルを参照してください。

于 2012-03-18T01:32:35.603 に答える
9

#include <someheader.h>システムの場所にあるヘッダー ファイルに使用します。

#include "someheader.h".c ファイルのディレクトリにファイル someheader.h をインクルードしようとします。

ヘッダー ファイルをインクルードするだけでなく、ライブラリにリンクする必要があります。これは -l 引数で実行されます。

g++ -Wall youprogram.cpp -lname_of_library

そうしないと、「未定義参照 ..」リンカ エラーが発生します。

于 2012-03-18T01:26:29.023 に答える
1

簡単な修正は、使用することです:

#include <someheader.h>

someheader.hそれが標準のインクルード場所にあると仮定します(それを見つけるにlocate someheader.hは、シェルでコマンドを使用します。それが含まれている場合/usr/includeは、標準の場所にあります。のサブディレクトリにある場合は、ディレクトリ/usr/includeの一部をに追加するだけ/usr/includeです#includeディレクティブ (例: #include <fancy_lib/someheader.h>)

ただし、これは話の半分にすぎません。また、指定されたライブラリを見つけて、そのインクルード パス (そのヘッダー ファイルが格納されているパス) をコンパイラ コマンドに追加するように、ビルド システムをセットアップする必要があります (これgccは です-I/path/to/header)。そうすれば、ビルド システムで構成することにより、異なるバージョンでビルドすることもできます。ライブラリがヘッダーのみでない場合は、リンカーの依存関係にも追加する必要があります。ビルド システムでこれがどのように実現されるかは、そのドキュメントを参照することで最もよくわかります。

于 2012-03-18T01:32:03.690 に答える