c++ - 如何在Linux上构建Boost.Beast?该库位于 github 上,但要到 12 月才会包含在 Boost 中

标签 c++ linux boost build compilation

如何构建following library: Boost.Beast (直到 Boost 1.66.0 才在 boost 中可用)?

Reading the build instructions他们似乎只专注于 Windows:

cd ..
mkdir bin64
cd bin64
cmake -G"Visual Studio 14 2015 Win64" ..    # for 64-bit Windows builds (VS2015)
cmake -G"Visual Studio 15 2017 Win64" ..    # for 64-bit Windows builds (VS2017)

我已经安装了 Boost,它是 Beast 的依赖项( include/boost/beast/config.hpp 包括 <boost/config.hpp> ),使用:

sudo apt install libboost-dev

我尝试过使用cmake .make构建导致以下结果的库:

user:~/libraries/beast$ cmake .
-- The C compiler identification is GNU 6.3.0
-- The CXX compiler identification is GNU 6.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Check if compiler accepts -pthread
-- Check if compiler accepts -pthread - yes
-- Found Threads: TRUE  
-- Found OpenSSL: /usr/lib/x86_64-linux-gnu/libssl.so;/usr/lib/x86_64-linux-gnu/libcrypto.so (found version "1.0.2g") 
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/libraries/beast


user:~/libraries/beast$ make
[  0%] Building CXX object example/advanced/server/CMakeFiles/advanced-server.dir/advanced_server.cpp.o
In file included from /home/user/libraries/beast/include/boost/beast/websocket/stream.hpp:3512:0,
                 from /home/user/libraries/beast/include/boost/beast/websocket.hpp:18,
                 from /home/user/libraries/beast/example/advanced/server/advanced_server.cpp:18:
/home/user/libraries/beast/include/boost/beast/websocket/impl/read.ipp: In member function ‘std::size_t boost::beast::websocket::stream<NextLayer>::read_some(const MutableBufferSequence&, boost::beast::error_code&)’:
/home/user/libraries/beast/include/boost/beast/websocket/impl/read.ipp:1077:49: warning: enumeral and non-enumeral type in conditional expression [-Wextra]
                     cr.code == close_code::none ?
                     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
                         close_code::normal : cr.code,
                         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[  0%] Linking CXX executable advanced-server
CMakeFiles/advanced-server.dir/advanced_server.cpp.o: In function `std::thread::thread<main::{lambda()#1}>(main::{lambda()#1}&&)':
advanced_server.cpp:(.text+0x11a9): undefined reference to `pthread_create'
CMakeFiles/advanced-server.dir/advanced_server.cpp.o: In function `__static_initialization_and_destruction_0(int, int)':
advanced_server.cpp:(.text+0x158c): undefined reference to `boost::system::generic_category()'
advanced_server.cpp:(.text+0x1598): undefined reference to `boost::system::generic_category()'
advanced_server.cpp:(.text+0x15a4): undefined reference to `boost::system::system_category()'
CMakeFiles/advanced-server.dir/advanced_server.cpp.o: In function `boost::system::error_code::error_code()':
advanced_server.cpp:(.text._ZN5boost6system10error_codeC2Ev[_ZN5boost6system10error_codeC5Ev]+0x17): undefined reference to `boost::system::system_category()'
CMakeFiles/advanced-server.dir/advanced_server.cpp.o: In function `boost::system::errc::make_error_condition(boost::system::errc::errc_t)':
advanced_server.cpp:(.text._ZN5boost6system4errc20make_error_conditionENS1_6errc_tE[_ZN5boost6system4errc20make_error_conditionENS1_6errc_tE]+0x1c): undefined reference to `boost::system::generic_category()'
CMakeFiles/advanced-server.dir/advanced_server.cpp.o: In function `boost::asio::error::get_system_category()':
advanced_server.cpp:(.text._ZN5boost4asio5error19get_system_categoryEv[_ZN5boost4asio5error19get_system_categoryEv]+0x5): undefined reference to `boost::system::system_category()'
CMakeFiles/advanced-server.dir/advanced_server.cpp.o: In function `boost::beast::file_posix::close(boost::system::error_code&)':
advanced_server.cpp:(.text._ZN5boost5beast10file_posix5closeERNS_6system10error_codeE[_ZN5boost5beast10file_posix5closeERNS_6system10error_codeE]+0x32): undefined reference to `boost::system::generic_category()'
CMakeFiles/advanced-server.dir/advanced_server.cpp.o: In function `boost::beast::file_posix::open(char const*, boost::beast::file_mode, boost::system::error_code&)':
advanced_server.cpp:(.text._ZN5boost5beast10file_posix4openEPKcNS0_9file_modeERNS_6system10error_codeE[_ZN5boost5beast10file_posix4openEPKcNS0_9file_modeERNS_6system10error_codeE]+0x39): undefined reference to `boost::system::generic_category()'
advanced_server.cpp:(.text._ZN5boost5beast10file_posix4openEPKcNS0_9file_modeERNS_6system10error_codeE[_ZN5boost5beast10file_posix4openEPKcNS0_9file_modeERNS_6system10error_codeE]+0x173): undefined reference to `boost::system::generic_category()'
advanced_server.cpp:(.text._ZN5boost5beast10file_posix4openEPKcNS0_9file_modeERNS_6system10error_codeE[_ZN5boost5beast10file_posix4openEPKcNS0_9file_modeERNS_6system10error_codeE]+0x1d8): undefined reference to `boost::system::generic_category()'
CMakeFiles/advanced-server.dir/advanced_server.cpp.o: In function `boost::beast::file_posix::size(boost::system::error_code&) const':
advanced_server.cpp:(.text._ZNK5boost5beast10file_posix4sizeERNS_6system10error_codeE[_ZNK5boost5beast10file_posix4sizeERNS_6system10error_codeE]+0x38): undefined reference to `boost::system::generic_category()'
CMakeFiles/advanced-server.dir/advanced_server.cpp.o:advanced_server.cpp:(.text._ZNK5boost5beast10file_posix4sizeERNS_6system10error_codeE[_ZNK5boost5beast10file_posix4sizeERNS_6system10error_codeE]+0x7e): more undefined references to `boost::system::generic_category()' follow
collect2: error: ld returned 1 exit status
example/advanced/server/CMakeFiles/advanced-server.dir/build.make:94: recipe for target 'example/advanced/server/advanced-server' failed
make[2]: *** [example/advanced/server/advanced-server] Error 1
CMakeFiles/Makefile2:133: recipe for target 'example/advanced/server/CMakeFiles/advanced-server.dir/all' failed
make[1]: *** [example/advanced/server/CMakeFiles/advanced-server.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

最佳答案

CMakeLists.txt 仅适用于 Windows,但 bjam 构建脚本适用于所有平台。文档可以更好地解释这一点。但是,请注意,Beast 仅包含头文件,因此如果您尝试构建示例或测试,则只需使用 bjam 或 cmake。

关于c++ - 如何在Linux上构建Boost.Beast?该库位于 github 上,但要到 12 月才会包含在 Boost 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46397297/

相关文章:

c++ - 了解 glXCreateContextAttribsARB 属性设置

python - 为什么这是漏洞利用的结构

c++ - 如何使用 boost 正态分布类?

linux - 计算电池放电前剩余的时间?

linux - 无法加载 inputrc 文件

c++ - 将 glm::vec3 与 boost 多精度 float 相乘

c++ - Boost.serialization 未注册类异常与运行时链接共享库中定义的序列化类

C++ 将 Vector<BYTE> 转换为第一个 vector 字节为 0 的字符串

c++ - 引用文献未给出预期结果

c++ - 指针问题