嗨,我正在用 Scons 构建环境。对于 Windows 平台(链接)链接器使用前缀获取我的共享库路径的 Scons 设置 - 磁盘名称
我在 NFS 上有图书馆:
libs='\\\\share\\lib\\lib'
在 scons 我有:
env.Append(LIBPATH = [libs])
结果是链接器调用如下内容:
/LIBPATH:D:\share\lib\lib
嗨,我正在用 Scons 构建环境。对于 Windows 平台(链接)链接器使用前缀获取我的共享库路径的 Scons 设置 - 磁盘名称
我在 NFS 上有图书馆:
libs='\\\\share\\lib\\lib'
在 scons 我有:
env.Append(LIBPATH = [libs])
结果是链接器调用如下内容:
/LIBPATH:D:\share\lib\lib
看起来 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 文件。
这里问题的根源是 SCons 将在 LIBS 数组中找到的库添加到链接器命令行中——带有完整路径。这导致链接器将此完整路径名保存到生成的可执行文件中,这是不幸的,特别是如果我们正在构建一些稍后将安装到系统目录中的库。我不确定我们是否可以为此责怪 SCons,因为链接器需要找到用于链接它的库。
到目前为止,我只能找到以下两种解决方案:
这两种解决方案似乎都有些尴尬....
PS:(编辑)虽然有一个非便携式解决方案。您可以将特定选项传递给链接器。特别是在 GNU/Linux 系统上,您可以使用 -h 选项显式设置 DT_SONAME。当一个库包含这个明确设置的 DT_SONAME 字段时,其他库或可执行文件中的任何引用都将只使用该名称——在调用时将确切的解析留给链接器。通常这正是我们想要的,当构建一个稍后安装到系统中的新库时