【发布时间】:2020-03-03 17:25:15
【问题描述】:
为了加快开发过程,我一直在尝试在编译一些 cython 扩展时尝试使用“gold”链接器或多线程“lld”链接器来代替 GNU 链接器。在我的 setup.py 中,我尝试了以下内容:
lld_linker = shutil.which('ld.lld')
if lld_linker:
print("Using LLD Linker in place of GNU LD")
os.environ['LDSHARED'] = lld_linker
但是,这会导致链接过程失败,并出现大量“/usr/bin/ld: ..... undefined reference to .....”错误。 (构建工作正常,无需添加此 LDSHARED envvar)。无论是使用这个内部 os.environ,还是在调用 setup.py 之前导出 envvar,失败行为都是相同的。我有一种预感,也许 Cython 分配编译作业的多处理方法并没有将环境变量保留在任何地方,从而导致了这种链接器的混合?
如何正确指定链接器,以便设置与 GNU ld 链接器相同?
这里有一个相关的问题: How do I specify the linker when building python extensions? ;但是,如前所述,它并没有解决我的问题。
【问题讨论】: