您尝试在使用SCons ar命令引用库[1]时指定完整路径了吗?
Brady
为了补充我原来的答案,假设您的SCons脚本与我下面给出的类似:
通常,LIBPATH构建变量用于指定库的路径,但似乎仅适用于Program()构建器,并且不与ar命令一起使用。因此,需要为涉及的库指定完整路径。假设我有以下目录结构:
.
|-- 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: 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.