2012-03-20 10 views
1

スタンスライブラリ[1]を別のスタティックライブラリ[2]にsconsでリンクしようとしています。スタティックライブラリを別のスタティックライブラリにリンクする

残念なことに "ar"への呼び出しにはライブラリ[1]へのパスは含まれません。

この投稿によると、How to merge two "ar" static libraries into oneは、アーカイブを1つにマージする必要があります。

CheckLibWithHeaderの通常の呼び出しはここで十分ではありませんか? SConsはarコマンドでそれを参照するとき

敬具

+0

スタティックライブラリを別のスタティックライブラリにリンクすることはできません。静的ライブラリの内容を別の静的ライブラリに含めることができます。 (非ウィンドウと仮定)。あなたはそれを行うのに必要なコマンドの例にリンクしています。 – bdbaddog

答えて

3

あなたは[1]のライブラリへの完全なパスを指定したことがありますか?私の元の答えに詳細情報を追加

ブレイディ

通常、LIBPATH建設変数がされています:あなたがSConsはスクリプトを掲示してhaventので は、私は以下の提示のようなその何かを仮定しますライブラリへのパスを指定するために使用されますが、これはProgram()Builderでのみ機能するように見え、arコマンドでは使用されません。次に、問題のライブラリの完全なパスを指定する必要があります。そうする方法を示しSConscriptここ

# tree . 
. 
|-- SConstruct 
|-- fileA.cc 
|-- fileA.o 
|-- libB 
| `-- libmoduleB.a 
|-- libmoduleA.a 
`-- libmoduleC.a 

されています:私は、次のディレクトリ構造を持っていると仮定すると

env = Environment() 
env.Library(target = 'moduleA', source = 'fileA.cc') 
env.Library(target = 'moduleC', source = ['libmoduleA.a', '#libB/libmoduleB.a']) 

またはその代わりに相対ディレクトリ「#libB」のは、あなたは絶対パスを指定することができます。ここで

libBname = "%smoduleB%s" % (env['LIBPREFIX'], env['LIBSUFFIX']) 
libB = os.path.join(pathToLibB, libBname) 

は結果である:それは、ポータブル、あなたがこのようなmoduleBライブラリ(とmoduleA)を指定する必要があります作るために、

を(パスの「#」がSConscriptにその相対を意味する)と:

# scons 
scons: Reading SConscript files ... 
scons: done reading SConscript files. 
scons: Building targets ... 
g++ -o fileA.o -c fileA.cc 
ar rc libmoduleA.a fileA.o 
ranlib libmoduleA.a 
ar rc libmoduleC.a libmoduleA.a libB/libmoduleB.a 
ranlib libmoduleC.a 
scons: done building targets. 
+0

こんにちはBrady、私はenv.Append(LINKFLAGS = [' - lLibrary1'])と.CheckLibWithHeader(...)を結んでいますが、arコマンドは決して変更されません。ありがとう、トーマス。 – Thomas

+0

SConsスクリプトを表示してください。 – Brady

+0

非常に詳細な回答をありがとう - それはうまくいった! – Thomas

0

あなたがにリンクされた他のSO questionのコマンドを実行し、ビルダーを作成する必要があると思います。あなたは、各静的ライブラリ(ar t libabc.a)に含まれるファイルを検索し、その後、通常の静的ライブラリビルダへの入力として、その出力を使用するスキャナを必要とするかもしれないけど

ar -x libabc.a 
ar -x libxyz.a 
ar -c libaz.a *.o 

ofiles = env.unArchive('libabc.a') 
ofiles.extend(env.unArchive('libxyz.a')) 

env.StaticLibrary('az',ofiles) 

何かがうまくいくはずです。

関連する問題