Вы пытались указать полный путь к библиотеке [1] при обращении к ней с помощью команды SCons ar?
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'])
Или вместо относительного dir '#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.