Scons将磁盘名称前缀添加到NFS LIBPATH

时间:2009-10-07 16:25:30

标签: scons

嗨,我正在用Scons建立环境。 对于Windows平台(链接)链接器获取Scons设置 我的共享库路径的前缀 - 磁盘名称

我在NFS上的库:

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

在scons我有:

env.Append(LIBPATH = [libs]) 

结果是链接器调用类似这样的东西:

  

/ LIBPATH:d:\共享\ lib中\ lib中

2 个答案:

答案 0 :(得分:1)

看起来Append功能正在改变您的输入。你试过通过__set_item__接口操纵'LIBPATH'吗?尝试:

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

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

另外,如果你想退出python \ escape-hell,你可以使用字符串前缀 r 代表“raw”,你所有的将通过unmolested传递。

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

编辑: 在回应作者的评论时,为了进一步调试,请尝试:

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解释器中操作字符串。做< Windows start> - > <运行...>。然后输入'python'。这应该给你一个交互式python终端,你可以尝试字符串操作。如果执行该命令序列不起作用,您可以尝试在某处找到您的python安装并双击python.exe文件。

答案 1 :(得分:0)

问题的根源在于,SCons将LIBS数组中的lib添加到链接器命令行 - 具有完整路径。这导致链接器将此完整路径名保存到生成的可执行文件中,这是不幸的,特别是如果我们正在构建一些稍后将安装到系统目录中的库。我不确定我们是否可以责怪SCons,因为链接器需要找到用于链接它的库。

到目前为止,我只能找到以下两种解决方案:

  • 在同一个构建目录中构建lib和可执行文件,移动生成的文件 之后(例如使用Install()构建器)。这导致只是名称 库以可执行文件结尾
  • 链接系统目录中已安装的库并使用这些机制 用于配置正确的依赖关系

两种解决方案看起来都有点尴尬......

PS:(编辑)但是有一个非便携式解决方案。您可以将特定选项传递给链接器。特别是,在GNU / Linux系统上,您可以使用-h选项显式设置DT_SONAME。当库包含此明确设置DT_SONAME字段时,其他库或可执行文件中的任何引用将仅使用该名称 - 在调用时将精确的解析保留给链接器。通常,这正是我们想要的,在构建一个新的库以便稍后安装到系统中时