Вы пытались указать полный путь к библиотеке [1], обращаясь к нему с SCons ар команды?
Brady
Добавление больше информации в мой оригинальный ответ: Поскольку у вас нету вывесили ваши 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.
Вы не можете связать статическую библиотеку с другой статической библиотекой. Вы можете включить содержимое статической библиотеки в другую статическую библиотеку. (Предполагая не-окна). Вы даже привязаны к примеру команд, необходимых для этого. – bdbaddog