嗨,我正在用Scons建立环境。 对于Windows平台(链接)链接器获取Scons设置 我的共享库路径的前缀 - 磁盘名称
我在NFS上的库:
libs='\\\\share\\lib\\lib'
在scons我有:
env.Append(LIBPATH = [libs])
结果是链接器调用类似这样的东西:
/ LIBPATH:d:\共享\ lib中\ lib中
答案 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,因为链接器需要找到用于链接它的库。
到目前为止,我只能找到以下两种解决方案:
两种解决方案看起来都有点尴尬......
PS:(编辑)但是有一个非便携式解决方案。您可以将特定选项传递给链接器。特别是,在GNU / Linux系统上,您可以使用-h选项显式设置DT_SONAME。当库包含此明确设置DT_SONAME字段时,其他库或可执行文件中的任何引用将仅使用该名称 - 在调用时将精确的解析保留给链接器。通常,这正是我们想要的,在构建一个新的库以便稍后安装到系统中时