繁体   English   中英

g++ 未知 /tmp/cc21HhMd.o: 在函数`main::{lambda( 编译错误

[英]g++ unknown /tmp/cc21HhMd.o: In function `main::{lambda( compilation error

我尝试使用 g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39) 编译一些使用 uvlib 的开源简单服务器,我编译成功这是 github 存储库:

https://github.com/Matheus28/ws28

这是编译命令:

g++  echo.cpp -Wall -O0 -g -std=c++1y -I/home/vagrant/libuv/include -Isrc -L/home/vagrant/libuv/build -lssl -lcrypto -luv

但它给了我编译错误:

/tmp/cc21HhMd.o: In function `main::{lambda(ws28::Client*, char const*, unsigned long, int)#4}::operator()(ws28::Client*, char const*, unsigned long, int) const':
/home/vagrant/ws28/echo.cpp:36: undefined reference to `ws28::Client::Send(char const*, unsigned long, unsigned char)'
/tmp/cc21HhMd.o: In function `main::{lambda(uv_timer_s*)#6}::operator()(uv_timer_s*) const':
/home/vagrant/ws28/echo.cpp:58: undefined reference to `ws28::Server::StopListening()'
/tmp/cc21HhMd.o: In function `main':
/home/vagrant/ws28/echo.cpp:16: undefined reference to `ws28::Server::Server(uv_loop_s*, ssl_ctx_st*)'
/home/vagrant/ws28/echo.cpp:64: undefined reference to `ws28::Server::Listen(int, bool)'
/home/vagrant/ws28/echo.cpp:69: undefined reference to `ws28::Server::~Server()'
/home/vagrant/ws28/echo.cpp:69: undefined reference to `ws28::Server::~Server()'
collect2: error: ld returned 1 exit status
make: *** [out] Error 1

我不明白的是,他从哪里来处理这个对象的路线是什么?:

/tmp/cc21HhMd.o: In function `main::{lambda(ws28::Client*, char const*, unsigned long, int)#4}::operator()(ws28::Client*, char const*, unsigned long, int) const':

要回答您的外部问题:您仍然需要编译并链接到链接的 GitHub 存储库中src中的.cpp文件。 您没有告诉我们您的构建系统是什么,但我建议将 ws28 src 文件链接到静态库并链接到该库。 然后您可以通过链接到静态库来编译echo.cpp

或者,您可以简单地执行g++ echo.cpp src/*.cpp ...如果您不介意每次重新编译 ws28 库。

至于你内心的问题:每个[](...){...}东西都是一个lambda 表达式 编译器构造了一个匿名函子,它以 lambda 的主体作为其operator() 错误消息中的行号准确地告诉您哪个 lambda 需要哪个函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM