我有一个第三方库,我试图将其纳入模拟。我们有静态库(.a),以及它的所有运行时依赖项(共享对象)。我创建了一个非常简单的应用程序(在C中),它与库相关联。它所做的就是调用初始化函数,该函数是第三方库API的一部分,然后退出。当我直接从命令行运行它时,它工作正常。如果我将可执行文件提交给我们的Condor网格,它会在strncpy(libc.so.6)上出现seg错误。我强迫condor只在特定的机器上运行可执行文件,如果我直接在该机器上运行它,它可以正常工作。
我主要是Java程序员......有限的本机编码经验。我熟悉nm,ldd,catchsegv等工具......我可以运行它们。我真的不知道从哪里开始寻找问题。
我直接在执行机器上运行ldd,并通过condor提交的脚本以及我的可执行文件。在这两种情况下,ldd报告相同的文件。
我不明白如何直接运行它会起作用,但它会被condor运行失败。最终执行程序的进程condor_startd是一个以root身份启动的进程,并将其有效uid更改为提交者。也许这与它有关?
答案 0 :(得分:0)
不知道为什么这会导致问题,但罪魁祸首是LANG环境变量。在Condor下运行时未设置,但在本地运行时设置为US_EN.UTF-8。将此值添加到condor执行环境可以解决问题。