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