如何在OSX中修复“fatal error: 'sys/epoll.h' file not found”错误?

3

epoll 是一个 Linux 的东西。你得到了哪个头文件的错误?sys/epoll.h 还是 EpollEvent.h? - Shawn
@Shawn 我知道 epoll 是 Linux 的东西。我只是想知道如何在 MacOS 上安装 uWebSocket 或者类似的东西以使用 openssl。错误是关于 sys/epoll.h 头文件的。 - Mohsen
通常,库的构建过程中包含一个配置步骤(运行 configurecmake 或其他一些工具;请查看文档),该步骤测试头文件和函数的存在,并相应地启用或禁用它们的使用。 - Shawn
2个回答

6

你说得对,编译uWebSockets可能有些棘手。经过一些尝试,我发现你需要使用libuv而不是epoll,因为epoll是Linux内核的一部分,在MacOS上不可用。

使用homebrew安装:

brew install libuv

可以选择安装openssl和zlib(下面的makefile假定它们已安装)

brew install openssl zlib

更改Makefile为

.PHONY: examples
examples:
# HelloWorld 
    clang -DLIBUS_USE_LIBUV -DLIBUS_USE_OPENSSL -flto -O3 -c -IuSockets/src uSockets/src/*.c uSockets/src/eventing/*.c
    clang++ -flto -O3 -c -std=c++17 -Isrc -IuSockets/src examples/HelloWorld.cpp
    clang++ -L/usr/local/lib -luv -lssl -lcrypto -lz -flto -O3 -s *.o -o HelloWorld
    rm *.o

# HelloWorldThreaded 
    clang -DLIBUS_USE_LIBUV -DLIBUS_USE_OPENSSL -flto -O3 -c -IuSockets/src uSockets/src/*.c uSockets/src/eventing/*.c
    clang++ -flto -O3 -c -std=c++17 -Isrc -IuSockets/src examples/HelloWorldThreaded.cpp
    clang++ -L/usr/local/lib -luv -lssl -lcrypto -lz -lpthread -flto -O3 -s *.o -o HelloWorldThreaded
    rm *.o

# EchoServer 
    clang -DLIBUS_USE_LIBUV -DLIBUS_USE_OPENSSL -flto -O3 -c -IuSockets/src uSockets/src/*.c uSockets/src/eventing/*.c
    clang++ -flto -O3 -c -std=c++17 -Isrc -IuSockets/src examples/EchoServer.cpp
    clang++ -L/usr/local/lib -luv -lssl -lcrypto -lz -flto -O3 -s *.o -o EchoServer
    rm *.o

# EchoServerThreaded 
    clang -DLIBUS_USE_LIBUV -DLIBUS_USE_OPENSSL -flto -O3 -c -IuSockets/src uSockets/src/*.c uSockets/src/eventing/*.c
    clang++ -flto -O3 -c -std=c++17 -Isrc -IuSockets/src examples/EchoServerThreaded.cpp
    clang++ -L/usr/local/lib -luv -lssl -lcrypto -lz -lpthread -flto -O3 -s *.o -o EchoServerThreaded
    rm *.o

并运行make命令


4

macOS不支持epoll,如果您想使用epoll,您需要开发Unix环境。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接