0

我有一个第三方库,我正在尝试将其合并到模拟中。我们有静态库 (.a),以及它的所有运行时依赖项(共享对象)。我创建了一个与库链接的非常简单的应用程序(用 C 语言)。它所做的只是调用作为第三方库 API 一部分的初始化函数,然后退出。当我直接从命令行运行它时,它工作正常。如果我将可执行文件提交到我们的 Condor 网格,它会因 strncpy (libc.so.6) 上的段错误而失败。我已经强制 condor 只在特定机器上运行可执行文件,如果我直接在该机器上运行它,它工作正常。

我主要是一名 Java 程序员......本机编码经验有限。我对 nm、ldd、catchsegv 等工具非常熟悉,以至于我可以运行它们。我真的不知道从哪里开始寻找问题。

我已经直接在执行机器上运行 ldd,并通过 condor 提交的脚本以及我的可执行文件。ldd 在两种情况下都报告相同的文件。

我不明白直接运行它是如何工作的,但它会失败由秃鹰运行。最终执行程序的进程 condor_startd 是一个以 root 身份启动的进程,并将其有效 uid 更改为提交者。也许这与它有关?

4

1 回答 1

0

不知道为什么这会导致问题,但罪魁祸首是 LANG 环境变量。在 Condor 下运行时未设置,但在本地运行时设置为 US_EN.UTF-8。将此值添加到 condor 执行环境可以解决问题。

于 2011-04-20T17:34:10.440 回答