我有一个来自项目的静态库A
(我们称之为liba.so
),我想在我的项目中编译一个共享库B
(我们称之为libb.so
)并嵌入liba.so
其中。
另外,我在那个项目中有一个二进制文件,B
它也依赖于liba.so
,所以我想将它嵌入到二进制文件中。
那可能吗?如何?
我有一个来自项目的静态库A
(我们称之为liba.so
),我想在我的项目中编译一个共享库B
(我们称之为libb.so
)并嵌入liba.so
其中。
另外,我在那个项目中有一个二进制文件,B
它也依赖于liba.so
,所以我想将它嵌入到二进制文件中。
那可能吗?如何?
当 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 在同一个介子项目中时
当 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)
如果您有现有的预编译库,则可以直接将其包装在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)
(用介子 0.57 测试)