2011-06-15 62 views
0

我正在查看Tor作为RA项目的一部分的源代码。我试图弄清楚为什么它会自动编译为在一个系统上使用线程(SuSE),并在不同的系统上分配一个新进程(Solaris)。源代码中只有少数几个地方调用了fork(),并且它依赖于定义的各种符号(如ENABLE_THREADING或USE_PTHREADS)。我搜索了这些文件,并且一直无法找到大多数所需符号的定义。通常定义的系统相关符号在哪里?

我不是专门寻找这个问题的解决方案,但更多的是一般的指导原则。如何以及在哪里定义与系统相关的编译相关的符号?

回答

1

我真的不知道,但这里是我的猜想

这些是在Makefile中定义的。通常,Makefile是由某种./configure脚本动态生成的。

请注意,在C和C++中,通用惯例是使所有宏大写字符和下划线,以便它们更明显是宏。这当然只是惯例,并不是必需的。

最后,grep可以成为你的朋友。在源目录中尝试如下所示:

grep -R "ENABLE_THREADING" * 

这将找到所有使用或定义该宏的文件。

+0

当然,这个系统上的grep不允许你使用-R作为选项。我确实在我之前忽略的目录中找到了正确的文件,谢谢, – Joel 2011-06-15 12:58:00

0

这些是在部分生成的autotools期间生成的。