我是C++的新手,我想念很多有关它的知识。通常,我通过尝试和错误来完成工作。
但是现在我坚持使用uWebSockets为websocket服务器设置测试项目。
严重的是,没有可用的安装文档,并且不能作为C库提供。

我克隆了repo递归(由于子模块uSockets)并执行了makemake install
到目前为止一切顺利,没有错误。

我试图在eclipse中创建一个新的Managed C++ Project,并在main.cpp中添加了this file内容,并添加了ojit_a的内容

我将“包含路径”设置为src/ /usr/local/include/root/uWebSockets/uSockets/src
我还将编译器方言设置为c++ 17版本(因为这是uWebSockets所必需的)

现在我在构建期间遇到很多错误,而且我不知道如何解决它们:

13:58:48 **** Incremental Build of configuration Debug for project websocket-test ****
make all
Building file: ../src/main.cpp
Invoking: GCC C++ Compiler
g++ -std=c++17 -I/usr/local/include -I/root/uWebSockets/uSockets/src -I/usr/local/include/uWebSockets -O0 -g3 -Wall -Wconversion -c -fmessage-length=0 -pthread -MMD -MP -MF"src/main.d" -MT"src/main.o" -o "src/main.o" "../src/main.cpp"
Finished building: ../src/main.cpp

Building target: websocket-test
Invoking: GCC C++ Linker
g++ -L/usr/local/lib -L/usr/lib/x86_64-linux-gnu -pthread -o "websocket-test"  ./src/main.o
./src/main.o: In function `auto uWS::TemplatedApp<false>::ws<main::PerSocketData>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, uWS::TemplatedApp<false>::WebSocketBehavior&&)::{lambda(auto:1*, auto:2*)#2}::operator()<uWS::HttpResponse<false>, uWS::HttpRequest>(uWS::HttpResponse<false>*, uWS::HttpRequest*)':
/usr/local/include/uWebSockets/App.h:222: undefined reference to `us_socket_context_adopt_socket'
/usr/local/include/uWebSockets/App.h:234: undefined reference to `us_socket_timeout'
./src/main.o: In function `uWS::TemplatedApp<false>&& uWS::TemplatedApp<false>::ws<main::PerSocketData>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, uWS::TemplatedApp<false>::WebSocketBehavior&&)':
/usr/local/include/uWebSockets/App.h:122: undefined reference to `us_socket_context_loop'
/usr/local/include/uWebSockets/App.h:122: undefined reference to `us_loop_ext'
./src/main.o: In function `uWS::DeflationStream::DeflationStream(int)':
/usr/local/include/uWebSockets/PerMessageDeflate.h:131: undefined reference to `deflateInit2_'
./src/main.o: In function `uWS::DeflationStream::deflate(uWS::ZlibContext*, std::basic_string_view<char, std::char_traits<char> >, bool)':
/usr/local/include/uWebSockets/PerMessageDeflate.h:150: undefined reference to `deflate'
/usr/local/include/uWebSockets/PerMessageDeflate.h:161: undefined reference to `deflateReset'
./src/main.o: In function `uWS::DeflationStream::~DeflationStream()':
/usr/local/include/uWebSockets/PerMessageDeflate.h:177: undefined reference to `deflateEnd'
./src/main.o: In function `uWS::InflationStream::InflationStream()':
/usr/local/include/uWebSockets/PerMessageDeflate.h:185: undefined reference to `inflateInit2_'
./src/main.o: In function `uWS::InflationStream::~InflationStream()':
/usr/local/include/uWebSockets/PerMessageDeflate.h:189: undefined reference to `inflateEnd'
./src/main.o: In function `uWS::InflationStream::inflate(uWS::ZlibContext*, std::basic_string_view<char, std::char_traits<char> >, unsigned long)':
/usr/local/include/uWebSockets/PerMessageDeflate.h:206: undefined reference to `inflate'
/usr/local/include/uWebSockets/PerMessageDeflate.h:216: undefined reference to `inflateReset'
./src/main.o: In function `uWS::Loop::wakeupCb(us_loop_t*)':
/usr/local/include/uWebSockets/Loop.h:30: undefined reference to `us_loop_ext'
./src/main.o: In function `uWS::Loop::preCb(us_loop_t*)':
/usr/local/include/uWebSockets/Loop.h:46: undefined reference to `us_loop_ext'
./src/main.o: In function `uWS::Loop::postCb(us_loop_t*)':
/usr/local/include/uWebSockets/Loop.h:54: undefined reference to `us_loop_ext'
./src/main.o: In function `uWS::Loop::init()':
makefile:45: recipe for target 'websocket-test' failed
/usr/local/include/uWebSockets/Loop.h:65: undefined reference to `us_loop_ext'
./src/main.o: In function `uWS::Loop::create(void*)':
/usr/local/include/uWebSockets/Loop.h:70: undefined reference to `us_create_loop'
./src/main.o: In function `uWS::Loop::free()':
/usr/local/include/uWebSockets/Loop.h:106: undefined reference to `us_loop_ext'
/usr/local/include/uWebSockets/Loop.h:109: undefined reference to `us_loop_free'
./src/main.o: In function `uWS::Loop::addPostHandler(void*, fu2::abi_400::detail::function<fu2::abi_400::detail::config<true, false, fu2::capacity_default>, fu2::abi_400::detail::property<true, false, void (uWS::Loop*)> >&&)':
/usr/local/include/uWebSockets/Loop.h:113: undefined reference to `us_loop_ext'
./src/main.o: In function `uWS::Loop::removePostHandler(void*)':
/usr/local/include/uWebSockets/Loop.h:120: undefined reference to `us_loop_ext'
./src/main.o: In function `uWS::Loop::addPreHandler(void*, fu2::abi_400::detail::function<fu2::abi_400::detail::config<true, false, fu2::capacity_default>, fu2::abi_400::detail::property<true, false, void (uWS::Loop*)> >&&)':
/usr/local/include/uWebSockets/Loop.h:126: undefined reference to `us_loop_ext'
./src/main.o: In function `uWS::Loop::removePreHandler(void*)':
/usr/local/include/uWebSockets/Loop.h:133: undefined reference to `us_loop_ext'
./src/main.o: In function `uWS::Loop::run()':
/usr/local/include/uWebSockets/Loop.h:152: undefined reference to `us_loop_run'
./src/main.o: In function `uWS::WebSocket<false, true>::send(std::basic_string_view<char, std::char_traits<char> >, uWS::OpCode, bool)':
/usr/local/include/uWebSockets/WebSocket.h:109: undefined reference to `us_socket_context'
/usr/local/include/uWebSockets/WebSocket.h:109: undefined reference to `us_socket_context_ext'
./src/main.o: In function `uWS::HttpContext<false>::create(uWS::Loop*, us_socket_context_options_t)':
/usr/local/include/uWebSockets/HttpContext.h:325: undefined reference to `us_create_socket_context'
/usr/local/include/uWebSockets/HttpContext.h:332: undefined reference to `us_socket_context_ext'
./src/main.o: In function `uWS::HttpContext<false>::free()':
/usr/local/include/uWebSockets/HttpContext.h:343: undefined reference to `us_socket_context_free'
./src/main.o: In function `uWS::WebSocketContext<false, true>::free()':
/usr/local/include/uWebSockets/WebSocketContext.h:368: undefined reference to `us_socket_context_ext'
/usr/local/include/uWebSockets/WebSocketContext.h:371: undefined reference to `us_socket_context_free'
./src/main.o: In function `uWS::AsyncSocket<false>::getAsyncSocketData()':
/usr/local/include/uWebSockets/AsyncSocket.h:45: undefined reference to `us_socket_ext'
./src/main.o: In function `uWS::AsyncSocket<false>::getLoopData()':
/usr/local/include/uWebSockets/AsyncSocket.h:40: undefined reference to `us_socket_context'
/usr/local/include/uWebSockets/AsyncSocket.h:40: undefined reference to `us_socket_context_loop'
/usr/local/include/uWebSockets/AsyncSocket.h:40: undefined reference to `us_loop_ext'
./src/main.o: In function `uWS::AsyncSocket<false>::write(char const*, int, bool, int)':
/usr/local/include/uWebSockets/AsyncSocket.h:111: undefined reference to `us_socket_is_closed'
/usr/local/include/uWebSockets/AsyncSocket.h:121: undefined reference to `us_socket_write'
/usr/local/include/uWebSockets/AsyncSocket.h:169: undefined reference to `us_socket_write'
./src/main.o: In function `uWS::AsyncSocket<false>::timeout(unsigned int)':
/usr/local/include/uWebSockets/AsyncSocket.h:50: undefined reference to `us_socket_timeout'
./src/main.o: In function `uWS::WebSocketContext<false, true>::create(uWS::Loop*, us_socket_context_t*)':
/usr/local/include/uWebSockets/WebSocketContext.h:377: undefined reference to `us_create_child_socket_context'
/usr/local/include/uWebSockets/WebSocketContext.h:383: undefined reference to `us_socket_context_ext'
./src/main.o: In function `uWS::WebSocketContext<false, true>::getExt()':
/usr/local/include/uWebSockets/WebSocketContext.h:40: undefined reference to `us_socket_context_ext'
./src/main.o: In function `uWS::WebSocket<false, true>::getUserData()':
/usr/local/include/uWebSockets/WebSocket.h:44: undefined reference to `us_socket_ext'
./src/main.o: In function `uWS::WebSocket<false, true>::init(bool, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)':
/usr/local/include/uWebSockets/WebSocket.h:37: undefined reference to `us_socket_ext'
./src/main.o: In function `uWS::HttpContext<false>::listen(char const*, int, int)':
/usr/local/include/uWebSockets/HttpContext.h:385: undefined reference to `us_socket_context_listen'
./src/main.o: In function `uWS::HttpContext<false>::init()::{lambda(us_socket_t*, int, char*, int)#1}::operator()(us_socket_t*, int, char*, int) const':
/usr/local/include/uWebSockets/HttpContext.h:65: undefined reference to `us_socket_timeout'
/usr/local/include/uWebSockets/HttpContext.h:68: undefined reference to `us_socket_ext'
./src/main.o: In function `uWS::HttpContext<false>::init()::{lambda(us_socket_t*)#2}::operator()(us_socket_t*) const':
/usr/local/include/uWebSockets/HttpContext.h:82: undefined reference to `us_socket_ext'
./src/main.o: In function `uWS::HttpContext<false>::init()::{lambda(us_socket_t*, char*, int)#3}::operator()(us_socket_t*, char*, int) const':
/usr/local/include/uWebSockets/HttpContext.h:113: undefined reference to `us_socket_is_shut_down'
/usr/local/include/uWebSockets/HttpContext.h:117: undefined reference to `us_socket_ext'
./src/main.o: In function `uWS::HttpContext<false>::init()::{lambda(us_socket_t*, char*, int)#3}::operator()(us_socket_t*, char*, int) const::{lambda(void*, uWS::HttpRequest*)#1}::operator()({lambda(us_socket_t*, char*, int)#3}, uWS::HttpRequest) const':
/usr/local/include/uWebSockets/HttpContext.h:129: undefined reference to `us_socket_timeout'
/usr/local/include/uWebSockets/HttpContext.h:132: undefined reference to `us_socket_ext'
/usr/local/include/uWebSockets/HttpContext.h:137: undefined reference to `us_socket_close'
/usr/local/include/uWebSockets/HttpContext.h:148: undefined reference to `us_socket_close'
/usr/local/include/uWebSockets/HttpContext.h:159: undefined reference to `us_socket_is_closed'
/usr/local/include/uWebSockets/HttpContext.h:164: undefined reference to `us_socket_is_shut_down'
/usr/local/include/uWebSockets/HttpContext.h:177: undefined reference to `us_socket_timeout'
./src/main.o: In function `uWS::HttpContext<false>::init()::{lambda(us_socket_t*, char*, int)#3}::operator()(us_socket_t*, char*, int) const::{lambda(void*, std::basic_string_view<char, std::char_traits<char> >, bool)#2}::operator()({lambda(us_socket_t*, char*, int)#3}, std::char_traits<char>, bool) const':
/usr/local/include/uWebSockets/HttpContext.h:190: undefined reference to `us_socket_timeout'
/usr/local/include/uWebSockets/HttpContext.h:193: undefined reference to `us_socket_timeout'
/usr/local/include/uWebSockets/HttpContext.h:200: undefined reference to `us_socket_is_closed'
/usr/local/include/uWebSockets/HttpContext.h:205: undefined reference to `us_socket_is_shut_down'
./src/main.o: In function `uWS::HttpContext<false>::init()::{lambda(us_socket_t*, char*, int)#3}::operator()(us_socket_t*, char*, int) const::{lambda(void*)#3}::operator()({lambda(us_socket_t*, char*, int)#3}) const':
/usr/local/include/uWebSockets/HttpContext.h:218: undefined reference to `us_socket_close'
./src/main.o: In function `uWS::HttpContext<false>::init()::{lambda(us_socket_t*)#4}::operator()(us_socket_t*) const':
/usr/local/include/uWebSockets/HttpContext.h:266: undefined reference to `us_socket_timeout'
./src/main.o: In function `uWS::HttpContext<false>::init()':
/usr/local/include/uWebSockets/HttpContext.h:63: undefined reference to `us_socket_context_on_open'
/usr/local/include/uWebSockets/HttpContext.h:80: undefined reference to `us_socket_context_on_close'
/usr/local/include/uWebSockets/HttpContext.h:102: undefined reference to `us_socket_context_on_data'
/usr/local/include/uWebSockets/HttpContext.h:258: undefined reference to `us_socket_context_on_writable'
/usr/local/include/uWebSockets/HttpContext.h:293: undefined reference to `us_socket_context_on_end'
/usr/local/include/uWebSockets/HttpContext.h:302: undefined reference to `us_socket_context_on_timeout'
./src/main.o: In function `uWS::HttpContext<false>::getSocketContextData()':
/usr/local/include/uWebSockets/HttpContext.h:53: undefined reference to `us_socket_context_ext'
./src/main.o: In function `auto uWS::WebSocketContext<false, true>::init()::{lambda(auto:1*)#1}::operator()<us_socket_t>(us_socket_t*) const':
/usr/local/include/uWebSockets/WebSocketContext.h:242: undefined reference to `us_socket_ext'
/usr/local/include/uWebSockets/WebSocketContext.h:245: undefined reference to `us_socket_context'
/usr/local/include/uWebSockets/WebSocketContext.h:245: undefined reference to `us_socket_context_ext'
./src/main.o: In function `auto uWS::WebSocketContext<false, true>::init()::{lambda(auto:1*, char*, int)#2}::operator()<us_socket_t>(us_socket_t*, char*, int) const':
/usr/local/include/uWebSockets/WebSocketContext.h:267: undefined reference to `us_socket_ext'
/usr/local/include/uWebSockets/WebSocketContext.h:275: undefined reference to `us_socket_context'
/usr/local/include/uWebSockets/WebSocketContext.h:275: undefined reference to `us_socket_context_ext'
./src/main.o: In function `auto uWS::WebSocketContext<false, true>::init()::{lambda(auto:1*)#3}::operator()<us_socket_t>(us_socket_t*) const':
/usr/local/include/uWebSockets/WebSocketContext.h:306: undefined reference to `us_socket_is_shut_down'
/usr/local/include/uWebSockets/WebSocketContext.h:311: undefined reference to `us_socket_ext'
/usr/local/include/uWebSockets/WebSocketContext.h:323: undefined reference to `us_socket_context'
/usr/local/include/uWebSockets/WebSocketContext.h:323: undefined reference to `us_socket_context_ext'
/usr/local/include/uWebSockets/WebSocketContext.h:336: undefined reference to `us_socket_context'
/usr/local/include/uWebSockets/WebSocketContext.h:336: undefined reference to `us_socket_context_ext'
./src/main.o: In function `auto uWS::WebSocketContext<false, true>::init()::{lambda(auto:1*)#4}::operator()<us_socket_t>(us_socket_t*) const':
/usr/local/include/uWebSockets/WebSocketContext.h:350: undefined reference to `us_socket_close'
./src/main.o: In function `auto uWS::WebSocketContext<false, true>::init()::{lambda(auto:1*)#5}::operator()<us_socket_t>(us_socket_t*) const':
/usr/local/include/uWebSockets/WebSocketContext.h:359: undefined reference to `us_socket_close'
./src/main.o: In function `uWS::WebSocketContext<false, true>::init()':
/usr/local/include/uWebSockets/WebSocketContext.h:240: undefined reference to `us_socket_context_on_close'
/usr/local/include/uWebSockets/WebSocketContext.h:264: undefined reference to `us_socket_context_on_data'
/usr/local/include/uWebSockets/WebSocketContext.h:303: undefined reference to `us_socket_context_on_writable'
/usr/local/include/uWebSockets/WebSocketContext.h:347: undefined reference to `us_socket_context_on_end'
/usr/local/include/uWebSockets/WebSocketContext.h:356: undefined reference to `us_socket_context_on_timeout'
./src/main.o: In function `uWS::HttpContext<false>::getSocketContextDataS(us_socket_t*)':
/usr/local/include/uWebSockets/HttpContext.h:57: undefined reference to `us_socket_context_ext'
./src/main.o: In function `uWS::AsyncSocket<false>::close()':
/usr/local/include/uWebSockets/AsyncSocket.h:60: undefined reference to `us_socket_close'
./src/main.o: In function `uWS::AsyncSocket<false>::shutdown()':
/usr/local/include/uWebSockets/AsyncSocket.h:55: undefined reference to `us_socket_shutdown'
./src/main.o: In function `uWS::HttpContext<false>::getSocketContext(us_socket_t*)':
/usr/local/include/uWebSockets/HttpContext.h:49: undefined reference to `us_socket_context'
./src/main.o: In function `uWS::WebSocketContext<false, true>::setCompressed(uWS::WebSocketState<true>*, void*)':
/usr/local/include/uWebSockets/WebSocketContext.h:45: undefined reference to `us_socket_ext'
./src/main.o: In function `uWS::WebSocketContext<false, true>::forceClose(uWS::WebSocketState<true>*, void*)':
/usr/local/include/uWebSockets/WebSocketContext.h:56: undefined reference to `us_socket_close'
./src/main.o: In function `uWS::WebSocketContext<false, true>::refusePayloadLength(unsigned long, uWS::WebSocketState<true>*, void*)':
/usr/local/include/uWebSockets/WebSocketContext.h:228: undefined reference to `us_socket_context'
/usr/local/include/uWebSockets/WebSocketContext.h:228: undefined reference to `us_socket_context_ext'
./src/main.o: In function `uWS::WebSocketContext<false, true>::handleFragment(char*, unsigned long, unsigned int, int, bool, uWS::WebSocketState<true>*, void*)':
/usr/local/include/uWebSockets/WebSocketContext.h:62: undefined reference to `us_socket_context'
/usr/local/include/uWebSockets/WebSocketContext.h:62: undefined reference to `us_socket_context_ext'
/usr/local/include/uWebSockets/WebSocketContext.h:63: undefined reference to `us_socket_ext'
/usr/local/include/uWebSockets/WebSocketContext.h:74: undefined reference to `us_socket_context'
/usr/local/include/uWebSockets/WebSocketContext.h:74: undefined reference to `us_socket_context_loop'
/usr/local/include/uWebSockets/WebSocketContext.h:74: undefined reference to `us_loop_ext'
/usr/local/include/uWebSockets/WebSocketContext.h:94: undefined reference to `us_socket_is_closed'
/usr/local/include/uWebSockets/WebSocketContext.h:121: undefined reference to `us_socket_context'
/usr/local/include/uWebSockets/WebSocketContext.h:121: undefined reference to `us_socket_context_loop'
/usr/local/include/uWebSockets/WebSocketContext.h:121: undefined reference to `us_loop_ext'
/usr/local/include/uWebSockets/WebSocketContext.h:152: undefined reference to `us_socket_is_closed'
/usr/local/include/uWebSockets/WebSocketContext.h:175: undefined reference to `us_socket_is_closed'
/usr/local/include/uWebSockets/WebSocketContext.h:182: undefined reference to `us_socket_is_closed'
/usr/local/include/uWebSockets/WebSocketContext.h:204: undefined reference to `us_socket_is_closed'
/usr/local/include/uWebSockets/WebSocketContext.h:211: undefined reference to `us_socket_is_closed'
./src/main.o: In function `uWS::WebSocket<false, true>::end(int, std::basic_string_view<char, std::char_traits<char> >)':
/usr/local/include/uWebSockets/WebSocket.h:121: undefined reference to `us_socket_ext'
/usr/local/include/uWebSockets/WebSocket.h:147: undefined reference to `us_socket_context'
/usr/local/include/uWebSockets/WebSocket.h:147: undefined reference to `us_socket_context_ext'
collect2: error: ld returned 1 exit status
make: *** [websocket-test] Error 1
"make all" terminated with exit code 2. Build might be incomplete.

13:58:55 Build Failed. 117 errors, 0 warnings. (took 6s.326ms)

如果我尝试链接/usr/local/include/uWebSockets,我会得到usockets
我希望有人可以帮助我。 :-/

最佳答案

您需要将静态uSockets.a库链接到您的代码。假设您将uSockets.a库复制到/usr/local/lib,那么这就是构建代码的方式:
g++ main.cpp -o main.o -std=c++17 -I/usr/local/include/uWebSockets -L/usr/local/lib -lz -lpthread -l:uSockets.a
-L标志告诉链接器在哪里寻找库。 -lz链接zlib,而-l:uSockets.a链接静态 uSockets库,这是导致链接器错误的原因。如果使用ssl选项,则必须添加-lssl

关于c++ - eclipse cpp ide中的uWebSockets undefined reference ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62043167/

10-11 00:44