2017-11-15 3 views
0

スタティックライブラリ(.a)を別のプロジェクトで使用しようとしています。私は#includeのヘッダーをこの.aから作成したいのですが、エラーがあります。スタティックライブラリ(.a)のヘッダーファイル(.h)を使用

まず、私はそれが.Aの下に存在するかどうかを理解するためには、.Aファイル内の.hファイルを検索しようとした私が取得:

Binary file libtest.a matches 

ので、静的ライブラリの下でヘッダー。その後、私はCMakeFiles.txtにこの方法を挿入します。

Fatal error: 'example.h' file not found 

をそして私はこのようにCにインポートしています:私はAndroidの-Studioでアプリケーションを実行すると

cmake_minimum_required(VERSION 3.4.1) 

add_library(hello-jni SHARED 
      hello-jni.c) 

# Include libraries needed for hello-jni lib 
target_link_libraries(hello-jni 
         android 
         log 
        /home/prvs/android-ndk/hello/jni/app/src/main/cpp/libtest.a 
      ) 

はしかし、私が得ました:

#include <example.h> 

ヘッダーファイルをインポートするには、別の手順が必要ですか?

+1

プロジェクトのインクルードディレクトリリストにヘッダーのディレクトリを設定する必要があります。 –

答えて

1

静的ライブラリファイル(WindowsではUnix/Linux .lib.a)は、通常、ではなく、にヘッダーが含まれます。はい、技術的には、オブジェクトファイルに沿って任意のファイルをパックすることは可能ですが、ほとんどのリンカーはそれを詰まらせ、そのような忌み嫌いがあるときに作業することを拒否します。

アーカイブのヘッダー名を検索するとき、ヘッダーファイル名がライブラリの一部であるデバッグメタデータの一部である可能性が最も高い理由です(デバッガはバイナリの場所をソースファイルの場所に変換できる)。

追加のインクルードディレクトリとしてコンパイルするときは、ヘッダーを別々にインストールし、インストール場所を指定する必要があります。

0

ライブラリを使用するには、ライブラリのコンパイル済みコード(.aファイル、.soファイル、.libファイルなど)と、エントリポイントを記述するヘッダーファイルライブラリのために。一般的に、ライブラリからヘッダーを派生させることはできません。

たとえば、コンパイラにライブラリファイルの形式として付属するC++標準ライブラリを使用するには、 "iostream"、 "string"などの名前を持つ標準ヘッダファイルを使用します。

使用すると、1つのソースファイルからコンパイルされたコードを含むライブラリがある場合たとえば、:すべてのソースファイルで

// mylibrary.h 
void f(int i); 

// source.cpp 
#include <iostream> 
void f(int i) { 
    std::cout << i << '\n'; 
} 

を使用すると、そのエントリポイントを記述したヘッダファイルを必要としますfを呼び出す場合は#include "mylibrary.h"が必要です。実行ファイルをリンクするときは、ライブラリのコンパイル済みコードにリンクする必要があります。

関連する問題