2016-03-30 15 views
1

ntlライブラリを使用して簡単なC++プログラムを書きました。私は私のプログラムから静的ライブラリを作成しようとしています。私はこれらのコマンドを使用しました:システムライブラリを使用して静的ライブラリを作成するにはどうすればよいですか?

g++ -Wall -g -c base.cpp -o base.o 
ar rcs libMyStaticLib.a *.o 

libMyStaticLib.aが正常に作成されました。私は別のプロジェクトでlibMyStaticLib.aを使用する場合でも、私はこれらのエラーを取得:

g++ -o main.out main.cpp -lMyStaticLib 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../lib/libMyStaticLib.a(base.o): In function `NTL::Vec<NTL::GF2>::~Vec()': 
/usr/local/include/NTL/vec_GF2.h:43: undefined reference to `NTL::WordVector::~WordVector()' 

私のmain.cppにし

#include <iostream> 
#include </home/Qwer/test/base.h> 

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

静的ライブラリ

ar rcs libMyStaticLib.a *.o -lntl 

しかし、私が作成している間、私はntlライブラリをリンクしてみてくださいこのエラーが発生する:

ar: two different operation options specified 

静的ライブラリを試して、別のプロジェクトで使用したいと思っています。どうすればいい?

答えて

1

静的ライブラリは、オブジェクトファイルのより多くの何もアーカイブこと(つまり、arプログラムが作成するものだ、と.aサフィックスの略)ではありません。静的ライブラリとのリンクは、アーカイブ内のオブジェクトファイルとリンクするようなものです。

$ g++ -o main.out main.cpp -lMyStaticLib -lntl 
+1

感謝を:あなたの静的ライブラリはもに依存し、他の全てのライブラリをリンクしなければならない理由だ

。しかし、ntlライブラリを使わずにコードをコンパイルする必要があります(envireonmentにはありません)。 myStaticLib(または何か他のもの)とntlを統合する方法はありますか? – user4757345

+0

@ user4757345 ntlがインストールされているシステムでライブラリを構築していて、ntlがインストールされていないシステムでライブラリを使いたいのですか?ほとんどのプロジェクトは依存関係をリストし、依存関係をインストールするようにユーザーに依頼します(あなたの場合はntl)。それ以外の唯一の解決策は、ntlに静的ライブラリがある場合です。ここで、ライブラリからオブジェクトファイルを抽出して自分のライブラリに追加することができます。しかし、そのソリューションにはライセンスの影響があるかもしれません。 –

+0

はい。私はすべての依存関係を持つ静的ライブラリを作成したいので、他のプログラマーはntlや他のシステムライブラリではなく、自分のライブラリを使うべきです。それは可能ですか? – user4757345

関連する問題