您是否尝试在使用 SCons ar 命令引用库 [1] 时指定其完整路径?
布雷迪
在我的原始答案中添加更多信息:
由于您还没有发布您的 SCons 脚本,我假设它类似于我在下面展示的那个:
通常,LIBPATH 构造变量用于指定库的路径,但它似乎只适用于 Program() 构建器,而不适用于 ar 命令。然后需要做的是指定相关库的完整路径。假设我有以下目录结构:
# tree .
.
|-- SConstruct
|-- fileA.cc
|-- fileA.o
|-- libB
| `-- libmoduleB.a
|-- libmoduleA.a
`-- libmoduleC.a
这是显示如何执行此操作的 SConscript:
env = Environment()
env.Library(target = 'moduleA', source = 'fileA.cc')
env.Library(target = 'moduleC', source = ['libmoduleA.a', '#libB/libmoduleB.a'])
或者,您可以指定绝对路径,而不是相对目录“#libB”。 (路径中的“#”表示相对于 SConscript)
并且,为了使其可移植,您应该像这样指定 moduleB 库(和 moduleA):
libBname = "%smoduleB%s" % (env['LIBPREFIX'], env['LIBSUFFIX'])
libB = os.path.join(pathToLibB, libBname)
结果如下:
# 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.