eclipse cpp ide中的uWebSockets未定义引用

Posted

技术标签:

【中文标题】eclipse cpp ide中的uWebSockets未定义引用【英文标题】:uWebSockets undefined references in eclipse cpp ide 【发布时间】:2020-05-27 12:29:17 【问题描述】:

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

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

我尝试在 Eclipse 中创建一个新的托管 C++ 项目,并将 main.cpp 添加到 src/ 中,内容为 this file

我将包含路径设置为 /usr/local/include /root/uWebSockets/uSockets/src/usr/local/include/uWebSockets

我还将编译器方言设置为版本 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)

如果我尝试链接usockets,我会得到cannot find -lusockets。 我希望有人可以帮助我解决这个问题。 :-/

【问题讨论】:

您找到解决方案了吗? 没有。我仍然不知道。我想使用这个库,但我无法让它工作。我现在正在使用海袜。它有点工作,但我不满意。 也许这会有所帮助:***.com/questions/39236917/… 【参考方案1】:

您需要将静态 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 链接导致链接器错误的 static uSockets 库。如果您使用 ssl 选项,则必须添加 -lssl

【讨论】:

以上是关于eclipse cpp ide中的uWebSockets未定义引用的主要内容,如果未能解决你的问题,请参考以下文章

如何在Eclipse下配置opencv

Eclipse IDE 中的 JavaME

Eclipse IDE 中的混淆选项

跳转到 Eclipse IDE 中的接口实现

Eclipse IDE 中的 java.io.Console 支持

Mac 上 Eclipse IDE 中的 Python Kivy