标题说得不是很清楚。先举个例子来看一下吧。 以下内容经过了重新排版。
# nginx -V
nginx version: nginx/1.10.1
built with OpenSSL 1.0.2h 3 May 2016
TLS SNI support enabled
configure arguments:
--prefix=/etc/nginx
--conf-path=/etc/nginx/nginx.conf
--sbin-path=/usr/bin/nginx
--pid-path=/run/nginx.pid
--lock-path=/run/lock/nginx.lock
--user=http
--group=http
--http-log-path=/var/log/nginx/access.log
--error-log-path=stderr
--http-client-body-temp-path=/var/lib/nginx/client-body
--http-proxy-temp-path=/var/lib/nginx/proxy
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-scgi-temp-path=/var/lib/nginx/scgi
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi
--with-ipv6
--with-pcre-jit
--with-file-aio
--with-http_addition_module
--with-http_auth_request_module
--with-http_dav_module
--with-http_degradation_module
--with-http_flv_module
--with-http_geoip_module
--with-http_gunzip_module
--with-http_gzip_static_module
--with-http_mp4_module
--with-http_realip_module
--with-http_secure_link_module
--with-http_ssl_module
--with-http_stub_status_module
--with-http_sub_module
--with-http_v2_module
--with-mail
--with-mail_ssl_module
--with-stream
--with-stream_ssl_module
--with-threads
可以看到,输出的内容有编译参数,其中就包括了配置文件路径、二进制文件路径等等,除此之外还有 OpenSSL 库的版本。
很明显,这样的信息是写入到二进制文件中去的。就比如说默认配置文件路径是 /etc/nginx/nginx.conf ,如果这个信息没有写入到二进制文件当中,那么 nginx 的二进制文件就根本不知道默认配置文件在哪里,而默认配置文件的参数又不是必定在 /etc/nginx ,也有可能是其他路径,但是这不是在编写 nginx 的源码时确定的,而是在 ./configure --some-args 的时候确定的。
有些程序的二进制文件给予 -v / -V / --version 之类的参数,还会输出编译器(比如 gcc/g++)的版本之类的信息。
那么,诸如 编译器信息 /编译参数 之类的信息是如何写入到二进制文件当中去的呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.