最近我从旧版本的 firebase 切换到了最新版本。切换后,由于错误,我无法编译我的应用程序(即使不使用 firebase 代码)
third_party/java/android/android_ndk_linux/r14/sources/cxx-stl/llvm-libc++/include/stdexcept:127: error: undefined reference to 'std::logic_error::logic_error(char const*)'
clang++.exe: error: linker command failed with exit code 1
Run Code Online (Sandbox Code Playgroud)
一旦我不包含 . 这个错误就会消失#include "firebase/admob.h"。
我已正确链接到 firebase。我确保使用-std=c++11
也许我犯了一个菜鸟错误,但我一生都无法弄清楚这一点。
我很乐意根据需要提供更多信息。
我当然没有在本地系统上遇到这个问题(当然),但是现在我正在设置一个虚拟服务器,我的部分代码存在一些问题.
为了从非阻塞TCP recv()接收所有数据,我有这个功能
ssize_t Server::recvAll(int sockfd, const void *buf, size_t len, int flags) {
// just showing here that they are non-blocking sockets
u_long iMode=1;
ioctlsocket(sockfd,FIONBIO,&iMode);
ssize_t result;
char *pbuf = (char *)buf;
while ( len > 0 ) {
result = recv(sockfd,pbuf,len,flags);
printf("\tRES: %d", result);
if ( result <= 0 ) break;
pbuf += result;
len -= result;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我注意到,recvAll将通常打印RES: 1024(1024是我送的字节数)和它的伟大工程.但不常见的是,数据丢失并且只打印RES: 400(其中400是大于0且小于1024的某个数字)并且我的代码不起作用,因为它需要所有1024个字节.
我也尝试打印WSAGetLastError()并在调试中运行,但由于我没有遇到此问题的打印/调试,看起来程序运行得足够慢.
我假设这个函数适用于阻塞套接字,但不适用于非阻塞套接字.
我可以采取任何测量建议,以确保我确实收到所有1024个字节,而非阻塞套接字没有数据丢失?