执行摘要:Apache 默默地失败了 SSI 包含,其中包含的 HTML 是由与 SQLite 和/或 pthread 链接的 C++ 程序生成的。当 C++ 不使用 SQLite 时,SSI 包含工作。
更长的版本:我有两个非常相似的 C++ 程序,它们产生 SSI 虚拟包含所需的输出。两者都为 HTML 生成大约 100 个选项的列表select
。其中一个包含按预期工作,但另一个什么也不做。
- 两个程序(独立运行时)在 stdout 上产生完全相同的输出,而在 stderr 上没有任何输出。因此,原则上,就 Apache 而言,它们的行为应该相同,但事实并非如此。
- 工作的程序(版本
A
)是简单的独立 C++ 代码,它使用 STL 生成一个字符串,该字符串被写入cout
;没问题。 - 失败的程序(版本
B
)稍微复杂一些。它是 C 和 C++ 的混合体,包括一个嵌入式 SQLite 数据库,通过 C API 与之对话。SQLite 也使用 pthread。 - 版本
B
在链接到静态和动态 SQLite 代码时都会失败。静态和动态版本都依赖于 pthreads 共享库。 - Apache 在运行版本时不会在错误日志中生成任何内容
B
,但它也不会将任何内容替换到 HTMLselect
中。我可以很容易地让 Apache 生成错误消息(#include
例如,通过在 HTML 中指定错误的可执行文件名称),所以我很确定 Apache 实际上至少确实尝试执行该程序。 - 两者都是
A
valgrindB
-clean。 - Apache 2.2.16、Ubuntu 10.10、prefork MPM
- 我根本无法得到任何输出
ScriptLog
,所以我可能设置不正确。我已设置LogLevel
为debug
,但它仍然没有告诉我有关脚本执行的任何信息。
有任何想法吗?谢谢。