configure相关笔记整理

本文分享了将Linux项目移植到Windows平台的经验,重点介绍了如何使用条件编译适应不同操作系统,解析了config.h的作用及configure流程中遇到的问题解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上半年时做了一个将Linux移植到Windows的项目,由于对configure&make这个过程不太熟悉,所以还是出了很多问题的。

现在简单整理当时的笔记。

Q1:

#ifdef x
...
#else
...
#endif 

这些东西是干什么的?

A1:一些程序在设计时,希望能对环境进行一些适应从而编译出不同的软件,比如在不同的操作系统下都能编译。我们可以通过变量设置,把所有可能用到的代码都写进去,在初始化时配置,但在不同的情况下可能只用到一部分代码,就没必要把所有的代码都写进去,就可以用条件编译,通过预编译指令设置编译条件,在不同的需要时编译不同的代码。比如 

#ifdef OS_WINDOWS

os.name = "windows";

#else

os.name = "other"

#endif


Q2:这些条件编译使用的变量怎么来的?为什么在config.h(类似)里看到了这些值?

A2:既然是为适应环境而产生的条件编译,那这些变量当然不能是写死的,一般来说Linux下的configure过程会分析这些变量该取哪些值的过程,然后会将这值写进一个头文件里,并让其他文件包含(config.h),生成Makefile文件

某工程的config.h如下

/* config.h.  Generated from config.h.in by configure.  */
/* config.h.in.  Generated from configure.ac by autoheader.  */

/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1

/* Define to 1 if you have the `dnet' library (-ldnet). */
#define HAVE_LIBDNET 1

/* Define to 1 if you have the `dumbnet' library (-ldumbnet). */
/* #undef HAVE_LIBDUMBNET */

/* Define to 1 if you have the `pcap' library (-lpcap). */
/* #undef HAVE_LIBPCAP */

/* Define to 1 if you have the `pthread' library (-lpthread). */
/* #undef HAVE_LIBPTHREAD */

/* Define to 1 if you have the `wpcap' library (-lwpcap). */
#define HAVE_LIBWPCAP 1

/* Define to 1 if you have the `ws2_32' library (-lws2_32). */
#define HAVE_LIBWS2_32 1

/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1

/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1

/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1

/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1

/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1

/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1

/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1

/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1

/* Defined when the system UNIX based */
/* #undef OS_UNIX */

/* Defined when the system is Windows based */
#define OS_WINDOWS 

/* Name of package */

Q3::configure时提示 can not guess build type怎么办?

A3:这时就是configure脚本无法判断当前的一些信息,比如操作系统,这时需要我们去指定,比如

--target=GARGET

除此之外,这个问题的产生是由于config.guess脚本无法guess产生的,一般都是因为config.guess比较老导致的,我们更新脚本即可。

地址:http://git.savannah.gnu.org/gitweb/?p=config.git

替换config.guess
重新configure
OK

<think>好的,我现在要帮用户查找关于Swoole的学习资料和笔记。首先,用户提到了几个引用内容,需要仔细看一下这些引用提供了哪些信息。引用1提到安装hiredis库,这可能和Swoole的Redis客户端有关。引用2和4都涉及Swoole的安装步骤,特别是PHP源码编译和扩展安装。引用3是关于EasySwoole框架的安装和启动。用户可能需要从基础安装到实际应用的教程。 接下来,我需要整理这些信息,看看有没有其他遗漏的部分。用户可能需要详细的安装步骤、学习资源推荐以及实际应用案例。根据引用中的内容,Swoole的安装涉及PHP扩展的编译,可能需要指导用户如何通过源码安装,配置PHP环境,以及使用Composer管理项目。另外,引用中的课程链接可能已经失效,但用户可能希望有类似的学习路径,比如入门教程、实战项目等。 用户的问题是关于学习教程和笔记,所以需要分步骤回答,涵盖安装、基础概念、学习资源、实战项目以及社区支持。同时,要确保回答结构清晰,按照用户提供的系统指令,使用正确的中文和LaTeX格式。还要生成相关问题,可能涉及安装问题、性能优化、框架选择等。 需要检查是否有遗漏的引用内容,比如引用4中的具体安装步骤,可能对用户有帮助。同时,用户之前的问题可能涉及Swoole的具体应用场景,需要结合实战项目来回答。还要注意引用中的示例代码是否正确,比如Composer创建项目的命令是否正确。 最后,生成的相关问题要围绕用户可能遇到的后续疑问,比如环境配置问题、性能调优、与其他技术的比较等。确保回答真实可靠,引用正确来源,并在末尾添加引用标识。</think>以下是为您整理的Swoole学习教程与笔记整理,分为基础安装、学习路径和实战资源三个部分: ### 一、Swoole基础环境搭建 1. **PHP环境要求** 需安装PHP7.2+版本并启用`pcntl`、`posix`等扩展,推荐通过源码编译安装: ```bash ./configure --prefix=/usr/local/php \ --enable-pcntl \ --enable-posix make -j && make install ``` [^2] 2. **Swoole扩展安装** ```bash git clone https://gitee.com/swoole/swoole.git cd swoole /usr/local/php/bin/phpize ./configure --with-php-config=/usr/local/php/bin/php-config make && make install ``` 安装完成后在php.ini中添加`extension=swoole.so`[^4] 3. **依赖库安装** 如使用Redis客户端需安装hiredis: ```bash wget https://github.com/redis/hiredis/archive/refs/tags/v1.0.2.tar.gz tar zxvf hiredis-1.0.2.tar.gz cd hiredis-1.0.2 make -j && sudo make install sudo ldconfig ``` [^1] ### 二、学习路径建议 1. **核心概念** - 进程模型:Master进程、Manager进程、Worker进程关系 - 协程原理:$Goroutine$与$Coroutine$的区别 - 网络通信:TCP/UDP服务器搭建$socket\_listen()$方法 2. **推荐学习资源** - 官方文档:https://wiki.swoole.com/ - 视频课程: - Swoole入门到实战(含直播系统开发) - PHP高性能微服务架构实战 - 书籍:《Swoole核心技术与实现》 ### 三、实战框架推荐 1. **EasySwoole框架** ```bash composer create-project easyswoole/app easyswoole cd easyswoole php easyswoole start ``` 支持HTTP/WebSocket/TCP服务,内置ORM和协程连接池[^3] 2. **Hyperf框架** 基于Swoole的协程框架,集成GRPC/JSON-RPC服务: ```bash composer create-project hyperf/hyperf-skeleton ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值