4

私はプロジェクトの静的ライブラリを持っておりA(これを と呼びましょうliba.so)、自分のプロジェクトで共有ライブラリをコンパイルしB(それを と呼びましょうlibb.so)、そこに組み込みたいliba.soと考えています。

また、そのプロジェクトBには にも依存するバイナリがあるliba.soので、バイナリに埋め込みたいと思います。

それは可能ですか?どのように?

4

2 に答える 2

4

A が別のコード ベースの場合

プロジェクト A をビルドしてインストールします。次に、プロジェクト B の定義でプロジェクト A への依存関係を作成します。

それは次のようになります。

a_dep = dependency('a', version : '>=1.2.8')    
lib_b = shared_library('proj_b', sources: 'prog_b.c', dependencies : a_dep)

のバージョン セクションdependencyはオプションです。

A が B と同じ Meson プロジェクトにある場合

A と B が同じメソン プロジェクトにある場合は、少し醜くなります。A で依存関係アンカーを宣言する必要があります。

それは次のようになります。

incdirs = include_directories('include')
lib_a = static_library('a', 'proj_a.c', include_directories : indirs)

liba_dependency = declare_dependency(
   include_directories : incdirs,
   link_with : lib_a,
   sources : ['proj_a.c'])

次に、プロジェクト B は次のようになります。

lib_b = shared_library('proj_b', sources: 'prog_b.c', dependencies : lib_a)
于 2016-01-09T19:28:44.417 に答える
2

既存のプリコンパイル済みライブラリがある場合は、次のように直接ラップできますdependency

cpp = meson.get_compiler('cpp')

# (Meson requires an absolute path for find_library().)
libdir = meson.current_source_dir() + './lib/

precompiledA_dep = cpp.find_library('A', dirs : libdir) # ./lib/libA.lib

...
# Link against libA.lib here ...
B_lib = library('libB', 'libB.cpp', dependencies : precompiledA_dep)
B_exe = executable('exeB', 'source.cpp', dependencies : precompiledA_dep)

(Meson 0.57 でテスト済み)

于 2021-02-24T14:07:29.453 に答える