作为 RA 项目的一部分,我正在查看 Tor 的源代码。我试图弄清楚为什么它被自动编译为在一个系统(SuSE)上使用线程并在另一个系统(Solaris)上分叉一个新进程。源代码中只有少数地方fork()
被调用,它取决于定义的各种符号(如 ENABLE_THREADING 或 USE_PTHREADS)。我搜索了这些文件,但无法找到大多数所需符号的定义。
我不是专门寻找解决此问题的方法,而是寻找一般指导方针。与系统相关的编译相关的符号是如何以及在哪里定义的?
作为 RA 项目的一部分,我正在查看 Tor 的源代码。我试图弄清楚为什么它被自动编译为在一个系统(SuSE)上使用线程并在另一个系统(Solaris)上分叉一个新进程。源代码中只有少数地方fork()
被调用,它取决于定义的各种符号(如 ENABLE_THREADING 或 USE_PTHREADS)。我搜索了这些文件,但无法找到大多数所需符号的定义。
我不是专门寻找解决此问题的方法,而是寻找一般指导方针。与系统相关的编译相关的符号是如何以及在哪里定义的?
老实说,我不知道,但这是我的猜测。
这些是在Makefile
. 通常,它Makefile
是由某种./configure
脚本动态生成的。
请注意,在 C 和 C++ 中,将所有宏设为大写字符和下划线是常见的约定,以便更明显地表明它们是宏。这当然只是惯例,不是必需的。
最后,grep
可以成为你的朋友。在源目录中尝试这样的事情:
grep -R "ENABLE_THREADING" *
这将找到所有使用或定义该宏的文件。
这些是在configure
构建过程中生成的autotools
。