Scons добавляет префикс имени диска в NFS LIBPATH - PullRequest
2 голосов
/ 07 октября 2009

Привет, я строю среду с помощью Scons. Для платформы Windows (ссылка) компоновщик получает настройки Scons моего пути к общей библиотеке с префиксом - имя диска

У меня есть библиотека по NFS:

libs='\\\\share\\lib\\lib'

В сконах у меня есть:

env.Append(LIBPATH = [libs]) 

В результате компоновщик вызывает что-то вроде этого:

/ LIBPATH: D: \ папка \ Lib \ Lib

Ответы [ 2 ]

1 голос
/ 09 октября 2009

Похоже, что функция добавления изменяет ваш ввод. Вы пытались манипулировать 'LIBPATH' через интерфейс __set_item__? Попробуйте:

env['LIBPATH'] += ':'+libs

или

env['LIBPATH'] += ':\\\\share\\lib\\lib'

Кроме того, если вы хотите выйти из python \ escape-hell, вы можете использовать строковый префикс r , который обозначает «raw», и все ваши будут проходить через unmoled. 1009 *

env['LIBPATH'] += r':\\share\lib\lib'

EDIT: В ответ на комментарий автора и для дальнейшей отладки попробуйте:

append_lib_path = r':\\share\lib\lib'
print 'DEBUG: append_lib_path is', append_lib_path

print "DEBUG: before appending to env['LIBPATH'], env['LIBPATH'] is ",env['LIBPATH']

env['LIBPATH'] += append_lib_path

print "DEBUG: after appending to env['LIBPATH'], env['LIBPATH'] is ",env['LIBPATH']

Если вы видите правильное значение в env ['LIBPATH'] на последнем отпечатке, то что-то еще в scons искажает ваш ввод. Если строка, которую вы хотите добавить к пути lib, неверна, попробуйте изменить строку в интерпретаторе python. Сделайте -> . Затем введите «питон». Это должно дать вам интерактивный терминал Python, и вы можете поэкспериментировать с манипулированием строками. Если выполнение этой последовательности команд не работает, вы можете попытаться найти где-нибудь установку python и дважды щелкнуть файл python.exe.

0 голосов
/ 28 января 2011

Корень проблемы здесь в том, что SCons добавляет библиотеки, найденные в массиве LIBS, в командную строку компоновщика - с полным путем. Это приводит к тому, что компоновщик сохраняет этот полный путь в сгенерированный исполняемый файл, что не очень хорошо, особенно если мы собираем некоторые библиотеки, которые позже будут установлены в системный каталог. Я не уверен, что мы можем обвинить SCons в этом, потому что компоновщик должен найти библиотеку для связи с ним.

До сих пор я мог найти только два следующих решения:

  • собрать библиотеки и исполняемый файл в одном каталоге, переместить сгенерированные файлы впоследствии (например, с помощью компоновщика Install ()). Это приводит только к названию библиотека заканчивается в исполняемом файле
  • ссылка на уже установленные библиотеки в системных каталогах и использование механизмов для настройки правильных зависимостей

оба решения кажутся несколько неловкими ....

PS: (правка) хотя есть непереносимое решение. Вы можете передать определенные параметры компоновщику. В частности, в системе GNU / Linux вы можете явно установить DT_SONAME с параметром -h. Если библиотека содержит это поле DT_SONAME с установленным набором параметров, тогда любые ссылки в других библиотеках или исполняемых файлах просто будут использовать это имя - оставляя точное разрешение компоновщику во время вызова. Обычно это именно то, что мы хотим, при создании новой библиотеки для последующей установки в систему

...