2

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

我在 NFS 上有图书馆:

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

在 scons 我有:

env.Append(LIBPATH = [libs]) 

结果是链接器调用如下内容:

/LIBPATH:D:\share\lib\lib

4

2 回答 2

1

看起来 Append 函数正在更改您的输入。您是否尝试过通过 __set_item__ 界面操作“LIBPATH”?尝试:

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

或者

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

另外,如果你想摆脱 python \escape-hell,你可以使用字符串前缀r,它代表“raw”,你所有的 \'s 都将通过不受干扰的传递。

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 开始> -> <运行 ...>。然后输入“蟒蛇”。这应该会给你一个交互式 python 终端,你可以尝试字符串操作。如果执行该命令序列不起作用,您可以尝试在某个地方找到您的 python 安装并双击 python.exe 文件。

于 2009-10-08T21:25:44.277 回答
0

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

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

  • 在同一个构建目录中构建库和可执行文件,然后移动生成的文件(例如,使用 Install() 构建器)。这导致库的名称最终出现在可执行文件中
  • 链接到系统目录中已安装的库并使用配置正确依赖项的机制

这两种解决方案似乎都有些尴尬....

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

于 2011-01-28T18:04:07.057 回答