Linux Qt 編譯Nginx原始碼
1、環境準備
(1)安裝Linux系統,例如CentOS 7,帶GNOME桌面環境,gcc v4.8.5,http://mirror.centos.org/
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
yum -y install gcc gcc-c++ autoconf automake
yum -y install zlib zlib-devel openssl openssl-devel pcre-devel
(2)安裝qt-opensource-linux-x64-5.9.7.run,http://download.qt.io/official_releases/qt/
(3)使用原始碼nginx-1.12.2.tar.gz,http://nginx.org/download/解壓並配置nginx原始碼:
tar -xvf nginx-1.12.2.tar.gz
chmod -R 777 nginx-1.12.2
cd nginx-1.12.2
./configure
make #這個步驟可有可無,不過建議make,驗證一下原始碼是否有效
上述步驟執行完後,在nginx-1.12.2目錄下會生成objs資料夾,其中有我們後續會新增到qt工程中的程式碼檔案,需要特別注意;
2、開啟QtCreator,新建pro空工程
4、新建nginxQtProject工程,建立之後的資料夾情況如下,請關注nginxQtProject資料夾裡面的.pro檔案:
5、匯入相關.c和.h檔案
6、.pro檔案清單如下,檔案主要來源是src和objs資料夾,註釋掉的是編譯通不過的檔案:
TARGET = nginx LIBS = -ldl -lpthread -lcrypt -lpcre -lz #LIBS = -lpthread -lcrypt -lpcre -lcrypto -lcrypto -lz INCLUDEPATH += \ ../src/core \ ../src/event \ ../src/event/modules \ ../src/http \ ../src/http/modules \ #../src/mail \ #../src/misc \ ../src/os/unix \ ../src/stream \ ../objs HEADERS += \ ../src/core/nginx.h \ ../src/core/ngx_array.h \ ../src/core/ngx_buf.h \ ../src/core/ngx_conf_file.h \ ../src/core/ngx_config.h \ ../src/core/ngx_connection.h \ ../src/core/ngx_core.h \ ../src/core/ngx_crc.h \ ../src/core/ngx_crc32.h \ ../src/core/ngx_crypt.h \ ../src/core/ngx_cycle.h \ ../src/core/ngx_file.h \ ../src/core/ngx_hash.h \ ../src/core/ngx_inet.h \ ../src/core/ngx_list.h \ ../src/core/ngx_log.h \ ../src/core/ngx_md5.h \ ../src/core/ngx_module.h \ ../src/core/ngx_murmurhash.h \ ../src/core/ngx_open_file_cache.h \ ../src/core/ngx_palloc.h \ ../src/core/ngx_parse.h \ ../src/core/ngx_parse_time.h \ ../src/core/ngx_proxy_protocol.h \ ../src/core/ngx_queue.h \ ../src/core/ngx_radix_tree.h \ ../src/core/ngx_rbtree.h \ ../src/core/ngx_regex.h \ ../src/core/ngx_resolver.h \ ../src/core/ngx_rwlock.h \ ../src/core/ngx_sha1.h \ ../src/core/ngx_shmtx.h \ ../src/core/ngx_slab.h \ ../src/core/ngx_string.h \ ../src/core/ngx_syslog.h \ #../src/core/ngx_thread_pool.h \ ../src/core/ngx_times.h \ ../src/event/ngx_event.h \ ../src/event/ngx_event_connect.h \ ../src/event/ngx_event_openssl.h \ ../src/event/ngx_event_pipe.h \ ../src/event/ngx_event_posted.h \ ../src/event/ngx_event_timer.h \ ../src/http/modules/perl/nginx.xs \ ../src/http/modules/perl/ngx_http_perl_module.h \ ../src/http/modules/ngx_http_ssi_filter_module.h \ ../src/http/modules/ngx_http_ssl_module.h \ ../src/http/v2/ngx_http_v2.h \ ../src/http/v2/ngx_http_v2_module.h \ ../src/http/ngx_http.h \ ../src/http/ngx_http_cache.h \ ../src/http/ngx_http_config.h \ ../src/http/ngx_http_core_module.h \ ../src/http/ngx_http_request.h \ ../src/http/ngx_http_script.h \ ../src/http/ngx_http_upstream.h \ ../src/http/ngx_http_upstream_round_robin.h \ ../src/http/ngx_http_variables.h \ ../src/mail/ngx_mail.h \ ../src/mail/ngx_mail_imap_module.h \ ../src/mail/ngx_mail_pop3_module.h \ ../src/mail/ngx_mail_smtp_module.h \ ../src/mail/ngx_mail_ssl_module.h \ ../src/os/unix/ngx_alloc.h \ ../src/os/unix/ngx_atomic.h \ ../src/os/unix/ngx_channel.h \ ../src/os/unix/ngx_darwin.h \ ../src/os/unix/ngx_darwin_config.h \ ../src/os/unix/ngx_dlopen.h \ ../src/os/unix/ngx_errno.h \ ../src/os/unix/ngx_files.h \ ../src/os/unix/ngx_freebsd.h \ ../src/os/unix/ngx_freebsd_config.h \ ../src/os/unix/ngx_gcc_atomic_amd64.h \ ../src/os/unix/ngx_gcc_atomic_ppc.h \ ../src/os/unix/ngx_gcc_atomic_sparc64.h \ ../src/os/unix/ngx_gcc_atomic_x86.h \ ../src/os/unix/ngx_linux.h \ ../src/os/unix/ngx_linux_config.h \ ../src/os/unix/ngx_os.h \ ../src/os/unix/ngx_posix_config.h \ ../src/os/unix/ngx_process.h \ ../src/os/unix/ngx_process_cycle.h \ ../src/os/unix/ngx_setaffinity.h \ ../src/os/unix/ngx_setproctitle.h \ ../src/os/unix/ngx_shmem.h \ ../src/os/unix/ngx_socket.h \ ../src/os/unix/ngx_solaris.h \ ../src/os/unix/ngx_solaris_config.h \ ../src/os/unix/ngx_sunpro_atomic_sparc64.h \ ../src/os/unix/ngx_thread.h \ ../src/os/unix/ngx_time.h \ ../src/os/unix/ngx_user.h \ ../src/stream/ngx_stream.h \ ../src/stream/ngx_stream_script.h \ ../src/stream/ngx_stream_ssl_module.h \ ../src/stream/ngx_stream_upstream.h \ ../src/stream/ngx_stream_upstream_round_robin.h \ ../src/stream/ngx_stream_variables.h \ ../objs/ngx_auto_config.h \ ../objs/ngx_auto_headers.h SOURCES += \ #../src/misc/ngx_cpp_test_module.cpp \ ../src/core/nginx.c \ ../src/core/ngx_array.c \ ../src/core/ngx_buf.c \ ../src/core/ngx_conf_file.c \ ../src/core/ngx_connection.c \ ../src/core/ngx_cpuinfo.c \ ../src/core/ngx_crc32.c \ ../src/core/ngx_crypt.c \ ../src/core/ngx_cycle.c \ ../src/core/ngx_file.c \ ../src/core/ngx_hash.c \ ../src/core/ngx_inet.c \ ../src/core/ngx_list.c \ ../src/core/ngx_log.c \ ../src/core/ngx_md5.c \ ../src/core/ngx_module.c \ ../src/core/ngx_murmurhash.c \ ../src/core/ngx_open_file_cache.c \ ../src/core/ngx_output_chain.c \ ../src/core/ngx_palloc.c \ ../src/core/ngx_parse.c \ ../src/core/ngx_parse_time.c \ ../src/core/ngx_proxy_protocol.c \ ../src/core/ngx_queue.c \ ../src/core/ngx_radix_tree.c \ ../src/core/ngx_rbtree.c \ ../src/core/ngx_regex.c \ ../src/core/ngx_resolver.c \ ../src/core/ngx_rwlock.c \ ../src/core/ngx_sha1.c \ ../src/core/ngx_shmtx.c \ ../src/core/ngx_slab.c \ ../src/core/ngx_spinlock.c \ ../src/core/ngx_string.c \ ../src/core/ngx_syslog.c \ #../src/core/ngx_thread_pool.c \ ../src/core/ngx_times.c \ #../src/event/modules/ngx_devpoll_module.c \ ../src/event/modules/ngx_epoll_module.c \ #../src/event/modules/ngx_eventport_module.c \ #../src/event/modules/ngx_kqueue_module.c \ #../src/event/modules/ngx_poll_module.c \ ../src/event/modules/ngx_select_module.c \ #../src/event/modules/ngx_win32_select_module.c \ ../src/event/ngx_event.c \ ../src/event/ngx_event_accept.c \ ../src/event/ngx_event_connect.c \ #../src/event/ngx_event_openssl.c \ #../src/event/ngx_event_openssl_stapling.c \ ../src/event/ngx_event_pipe.c \ ../src/event/ngx_event_posted.c \ ../src/event/ngx_event_timer.c \ #../src/http/modules/perl/ngx_http_perl_module.c \ ../src/http/modules/ngx_http_access_module.c \ ../src/http/modules/ngx_http_addition_filter_module.c \ ../src/http/modules/ngx_http_auth_basic_module.c \ ../src/http/modules/ngx_http_auth_request_module.c \ ../src/http/modules/ngx_http_autoindex_module.c \ ../src/http/modules/ngx_http_browser_module.c \ ../src/http/modules/ngx_http_charset_filter_module.c \ ../src/http/modules/ngx_http_chunked_filter_module.c \ #../src/http/modules/ngx_http_dav_module.c \ #../src/http/modules/ngx_http_degradation_module.c \ ../src/http/modules/ngx_http_empty_gif_module.c \ ../src/http/modules/ngx_http_fastcgi_module.c \ ../src/http/modules/ngx_http_flv_module.c \ ../src/http/modules/ngx_http_geo_module.c \ #../src/http/modules/ngx_http_geoip_module.c \ ../src/http/modules/ngx_http_gunzip_filter_module.c \ ../src/http/modules/ngx_http_gzip_filter_module.c \ ../src/http/modules/ngx_http_gzip_static_module.c \ ../src/http/modules/ngx_http_headers_filter_module.c \ #../src/http/modules/ngx_http_image_filter_module.c \ ../src/http/modules/ngx_http_index_module.c \ ../src/http/modules/ngx_http_limit_conn_module.c \ ../src/http/modules/ngx_http_limit_req_module.c \ ../src/http/modules/ngx_http_log_module.c \ ../src/http/modules/ngx_http_map_module.c \ ../src/http/modules/ngx_http_memcached_module.c \ ../src/http/modules/ngx_http_mp4_module.c \ ../src/http/modules/ngx_http_not_modified_filter_module.c \ ../src/http/modules/ngx_http_proxy_module.c \ ../src/http/modules/ngx_http_random_index_module.c \ ../src/http/modules/ngx_http_range_filter_module.c \ #../src/http/modules/ngx_http_realip_module.c \ ../src/http/modules/ngx_http_referer_module.c \ ../src/http/modules/ngx_http_rewrite_module.c \ ../src/http/modules/ngx_http_scgi_module.c \ ../src/http/modules/ngx_http_secure_link_module.c \ ../src/http/modules/ngx_http_slice_filter_module.c \ ../src/http/modules/ngx_http_split_clients_module.c \ ../src/http/modules/ngx_http_ssi_filter_module.c \ #../src/http/modules/ngx_http_ssl_module.c \ ../src/http/modules/ngx_http_static_module.c \ #../src/http/modules/ngx_http_stub_status_module.c \ ../src/http/modules/ngx_http_sub_filter_module.c \ ../src/http/modules/ngx_http_upstream_hash_module.c \ ../src/http/modules/ngx_http_upstream_ip_hash_module.c \ ../src/http/modules/ngx_http_upstream_keepalive_module.c \ ../src/http/modules/ngx_http_upstream_least_conn_module.c \ ../src/http/modules/ngx_http_upstream_zone_module.c \ ../src/http/modules/ngx_http_userid_filter_module.c \ ../src/http/modules/ngx_http_uwsgi_module.c \ #../src/http/modules/ngx_http_xslt_filter_module.c \ #../src/http/v2/ngx_http_v2.c \ #../src/http/v2/ngx_http_v2_filter_module.c \ #../src/http/v2/ngx_http_v2_huff_decode.c \ #../src/http/v2/ngx_http_v2_huff_encode.c \ #../src/http/v2/ngx_http_v2_module.c \ #../src/http/v2/ngx_http_v2_table.c \ ../src/http/ngx_http.c \ ../src/http/ngx_http_copy_filter_module.c \ ../src/http/ngx_http_core_module.c \ ../src/http/ngx_http_file_cache.c \ ../src/http/ngx_http_header_filter_module.c \ ../src/http/ngx_http_parse.c \ ../src/http/ngx_http_postpone_filter_module.c \ ../src/http/ngx_http_request.c \ ../src/http/ngx_http_request_body.c \ ../src/http/ngx_http_script.c \ ../src/http/ngx_http_special_response.c \ ../src/http/ngx_http_upstream.c \ ../src/http/ngx_http_upstream_round_robin.c \ ../src/http/ngx_http_variables.c \ ../src/http/ngx_http_write_filter_module.c \ #../src/mail/ngx_mail.c \ #../src/mail/ngx_mail_auth_http_module.c \ #../src/mail/ngx_mail_core_module.c \ #../src/mail/ngx_mail_handler.c \ #../src/mail/ngx_mail_imap_handler.c \ #../src/mail/ngx_mail_imap_module.c \ #../src/mail/ngx_mail_parse.c \ #../src/mail/ngx_mail_pop3_handler.c \ #../src/mail/ngx_mail_pop3_module.c \ #../src/mail/ngx_mail_proxy_module.c \ #../src/mail/ngx_mail_smtp_handler.c \ #../src/mail/ngx_mail_smtp_module.c \ #../src/mail/ngx_mail_ssl_module.c \ #../src/misc/ngx_google_perftools_module.c \ ../src/os/unix/ngx_alloc.c \ ../src/os/unix/ngx_channel.c \ ../src/os/unix/ngx_daemon.c \ #../src/os/unix/ngx_darwin_init.c \ #../src/os/unix/ngx_darwin_sendfile_chain.c \ ../src/os/unix/ngx_dlopen.c \ ../src/os/unix/ngx_errno.c \ #../src/os/unix/ngx_file_aio_read.c \ ../src/os/unix/ngx_files.c \ #../src/os/unix/ngx_freebsd_init.c \ #../src/os/unix/ngx_freebsd_sendfile_chain.c \ #../src/os/unix/ngx_linux_aio_read.c \ ../src/os/unix/ngx_linux_init.c \ ../src/os/unix/ngx_linux_sendfile_chain.c \ ../src/os/unix/ngx_posix_init.c \ ../src/os/unix/ngx_process.c \ ../src/os/unix/ngx_process_cycle.c \ ../src/os/unix/ngx_readv_chain.c \ ../src/os/unix/ngx_recv.c \ ../src/os/unix/ngx_send.c \ ../src/os/unix/ngx_setaffinity.c \ ../src/os/unix/ngx_setproctitle.c \ ../src/os/unix/ngx_shmem.c \ ../src/os/unix/ngx_socket.c \ #../src/os/unix/ngx_solaris_init.c \ #../src/os/unix/ngx_solaris_sendfilev_chain.c \ #../src/os/unix/ngx_thread_cond.c \ #../src/os/unix/ngx_thread_id.c \ #../src/os/unix/ngx_thread_mutex.c \ ../src/os/unix/ngx_time.c \ ../src/os/unix/ngx_udp_recv.c \ ../src/os/unix/ngx_udp_send.c \ ../src/os/unix/ngx_udp_sendmsg_chain.c \ ../src/os/unix/ngx_user.c \ ../src/os/unix/ngx_writev_chain.c \ ../src/stream/ngx_stream.c \ ../src/stream/ngx_stream_access_module.c \ ../src/stream/ngx_stream_core_module.c \ ../src/stream/ngx_stream_geo_module.c \ #../src/stream/ngx_stream_geoip_module.c \ ../src/stream/ngx_stream_handler.c \ ../src/stream/ngx_stream_limit_conn_module.c \ ../src/stream/ngx_stream_log_module.c \ ../src/stream/ngx_stream_map_module.c \ ../src/stream/ngx_stream_proxy_module.c \ ../src/stream/ngx_stream_realip_module.c \ ../src/stream/ngx_stream_return_module.c \ ../src/stream/ngx_stream_script.c \ ../src/stream/ngx_stream_split_clients_module.c \ #../src/stream/ngx_stream_ssl_module.c \ ../src/stream/ngx_stream_ssl_preread_module.c \ ../src/stream/ngx_stream_upstream.c \ ../src/stream/ngx_stream_upstream_hash_module.c \ ../src/stream/ngx_stream_upstream_least_conn_module.c \ ../src/stream/ngx_stream_upstream_round_robin.c \ #../src/stream/ngx_stream_upstream_zone_module.c \ ../src/stream/ngx_stream_variables.c \ ../src/stream/ngx_stream_write_filter_module.c \ ../objs/ngx_modules.c
7、編譯通過,執行會報錯:
09:26:00: Starting /root/Downloads/nginx/nginx-1.12.2/build-nginxQtProject_firecat-Desktop_Qt_5_9_7_GCC_64bit-Debug/nginx...
nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)
2018/11/04 09:26:00 [emerg] 13081#0: open() "/usr/local/nginx/conf/nginx.conf" failed (2: No such file or directory)
09:26:00: /root/Downloads/nginx/nginx-1.12.2/build-nginxQtProject_firecat-Desktop_Qt_5_9_7_GCC_64bit-Debug/nginx exited with code 1
解決辦法:手動新建/usr/local/nginx/logs和conf路徑,把配置檔案拷貝過來。
另外,html資料夾(裡面有兩個檔案)也記得拷貝到/usr/local/nginx/路徑下。
---------------------
作者:libaineu2004
來源:CSDN
原文:https://blog.csdn.net/libaineu2004/article/details/83713425
版權宣告:本文為博主原創文章,轉載請附上博文連結!