小编m.s*_*.s.的帖子

C++服务器端没有阻塞listen()

下面的代码不会阻止listen(),它只是完成执行.你能告诉我为什么吗?(initWSA返回true,我检查了它).我正在关注一个教程,我被告知它应该阻止,因为它正在寻找客户端连接.

#include <iostream>
#include <WinSock2.h>

#pragma comment(lib, "ws2_32.lib")
using namespace std;

#define PORT 10000
bool initWSA(){
    WSADATA wsadata;
    int error = WSAStartup(0x0202, &wsadata);
    if (error) return false;
    if (wsadata.wVersion != 0x0202){
        WSACleanup();
        return false;
    }
    return true;
}
void closeConnection(SOCKET s)
{
    //Close the socket if it exists
    if (s)
        closesocket(s);

    WSACleanup(); //Clean up Winsock
}
int main(){
    initWSA();
    SOCKET s;
    SOCKADDR_IN addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(PORT);
    addr.sin_addr.s_addr = htonl(INADDR_ANY);
    s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (s == …
Run Code Online (Sandbox Code Playgroud)

c++ sockets connection winsock server

4
推荐指数
1
解决办法
6553
查看次数

强制CMake使用完整的库路径

我有以下问题.我的Linux机器上有一个单独的{bin,lib,include}树,其中安装了CMake和我开发工作所需的所有库.但只有PATH环境变量设置为此bin目录,并且由于某些原因我无法设置LD_LIBRARY_PATH.此树中的所有程序都是使用RPATH构建的.我正在使用的CMake 3.3.1也在这棵树里面.

现在问题我想使用libcurl编译程序并设置以下CMakeLists.txt

PROJECT(EXAMPLE)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) 
SET(CMAKE_SKIP_BUILD_RPATH FALSE)
FIND_PACKAGE(CURL REQUIRED)
FIND_PACKAGE(OpenSSL REQUIRED) 
INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR})
SET(LIBS ${CURL_LIBRARIES} ${OPENSSL_LIBRARIES}) 

ADD_EXECUTABLE(curl_ex src/curl_ex.c)
TARGET_LINK_LIBRARIES(curl_ex ${LIBS}) 
Run Code Online (Sandbox Code Playgroud)

当我现在运行CMake时,由于它与CMake位于相同的前缀内,因此找到了我的个人软件树中的curl和OpenSSL设置.

但是当我使用构建项目时,make VERBOSE=1我看到以下链接命令:

gcc CMakeFiles/curl_ex.dir/src/curl_ex.c.o  -o curl_ex -rdynamic -lcurl -lssl -lcrypto 
Run Code Online (Sandbox Code Playgroud)

构建可执行文件是指系统范围内安装的curl和openssl库,而不是配置期间找到的一个cmake.

如何强制CMake使用它在执行链接时找到的库?

linux linker cmake

4
推荐指数
1
解决办法
3054
查看次数

嵌入式linux的理论要求

我来自使用 Java、C#、C++、Javascript 的程序员背景

我给自己买了一个树莓派(Model 1 A,没有以太网的那个)并玩了一段时间。我使用了 Raspbian 和 Arch Linux ARM(因为有人说它小巧且可定制)。不幸的是,我没有按照我想要的方式配置它们。

我正在尝试构建一个漂亮的(嵌入式)系统,其唯一目标是快速启动(启动)Raspberry Pi 并自动启动一个测试应用程序,该应用程序将使用 C#(Mono)、C++(Qt)、Java(Java 运行时)编写或 JavaScript/HTML 中的东西。

由于我无法删除所有日志消息(我删除了大部分)、tty 登录屏幕、连接到网络的尝试(尽管 Model 1 A 根本没有以太网)启动是丑陋的并且花了很长时间(在某些情况下 +1 分钟)。

似乎我必须构建一个最小的嵌入式 linux,但我缺乏嵌入式 linux 元素的理论以及它们如何组合在一起。

我的问题:在树莓派上支持 mono、qt、java 运行时的嵌入式 linux 理论上需要哪些部分?

到目前为止,我知道以下部分:

  • 硬件(树莓派型号 1 A)+ SD 卡
  • SD卡有2个分区,1个引导分区(fat32),1个数据分区(ext4)
  • 引导加载程序
  • 一个 linux 内核(可以根据 raspi 的需要进行优化)

但是呢?我的研究在“使用发行版”中迷失了我不想要的东西。内核和启动应用程序之间缺少哪些部分?

theory embedded-linux raspberry-pi

4
推荐指数
1
解决办法
803
查看次数

用c ++编写一个完整的数组

我对c ++很新,有没有一种方法在c ++中我们可以通过for循环迭代除了整个静态数组?

int arra[10] = {1,2,3,4};
std::cout << arra << std::endl;
Run Code Online (Sandbox Code Playgroud)

我试过这个,但这是打印数组中第一个元素的地址.

c++ visual-c++ c++11

4
推荐指数
1
解决办法
2万
查看次数

C++ 11静态转换为右值引用

我的一个朋友在一个项目中写了一些类似的代码:

struct A {
  int x{0};
};

struct B : public A {
  int y{1};
};

int main() {
  A a;
  B b = static_cast<B &&>(a);
}
Run Code Online (Sandbox Code Playgroud)

IMO,这段代码显然存在缺陷,我通过尝试b.y在Valgrind(报告内存错误)下访问和运行程序来确认它.我不明白为什么这甚至编译(我使用的是g ++ 4.9.3).我实际上期待一条错误信息no matching function for call to B::B(A &&).如果这是一个愚蠢的评论,我道歉,但它与写作有什么不同B b = static_cast<B>(a)- 这确实给我一个编译错误?我看到的唯一区别是复制ABvs移动AB,这两个都是未定义的.

static-cast rvalue-reference c++11

4
推荐指数
1
解决办法
263
查看次数

传递lambda,它返回多态unique_ptr,作为函数指针

我想传递一个非捕获的lambda,它返回一个 std::unique_ptr<Derived>,作为类型的函数指针std::unique_ptr<Base>(*)().

但是,这只有在我明确声明lambda的返回类型为时才有效std::unique_ptr<Base>.

  • 为什么我明确说明了返回类型?
  • 为什么std::function没有这种额外的返回类型呢?

#include <functional>
#include <memory>

struct Base{virtual ~Base()=default;};
struct Derived : Base{};

struct FailsForF2
{
   using Function = std::add_pointer_t<std::unique_ptr<Base>()>;
   FailsForF2(Function f) {}
};

struct Works
{
   using Function = std::function<std::unique_ptr<Base>()>;
   Works(Function f) {}
};


std::unique_ptr<Derived> fun() {return std::make_unique<Derived>();} 

int main()
{

   auto f1 = [](){return std::make_unique<Base>();};
   auto f2 = [](){return std::make_unique<Derived>();};
   auto f3 = []()->std::unique_ptr<Base>{return std::make_unique<Derived>();};

   Works x1(f1);
   Works x2(f2);
   Works x3(f3);

   FailsForF2 x4(f1);
   FailsForF2 x5(f2);
   FailsForF2 x6(f3);
} …
Run Code Online (Sandbox Code Playgroud)

c++ lambda function-pointers c++14

4
推荐指数
1
解决办法
342
查看次数

ld找不到给定的库-L

我有一个目标文件main.o,需要将其链接到共享库./libsvm/libsvm.so.2。我有以下Makefile,但它对我不起作用。已在中指定库路径,-L./libsvmgcc -lsvm仍找不到共享库(libsvm.so.2)。

这是我的Makefile:

CC      = g++ -g
CFLAGS  = -Wall
HEADERS = -I./libsvm
OBJ     = main.o
LIBS    = -L./libsvm

all: lib $(OBJ)
     $(CC) $(LIBS) -lsvm $(OBJ) -o main

%.o: %.c
     $(CC) $(CFLAGS) $(HEADERS) -c -o $@ $<

lib:
     cd libsvm; make
Run Code Online (Sandbox Code Playgroud)

直接将它们链接起来就可以了,例如

ld main.o libsvm/libsvm.so.2 -o main
Run Code Online (Sandbox Code Playgroud)

我想知道Makefile中有什么问题。错误消息如下

g++ -g -L./libsvm -lsvm main.o -o main 
ld: library not found for -lsvm 
clang: error: linker command failed with exit code 1 …
Run Code Online (Sandbox Code Playgroud)

makefile ld

3
推荐指数
1
解决办法
4813
查看次数

使用扩展脚本在后效应项目中按名称获取合成

我正在研究After Effects脚本并使用AE脚本指南作为学习的基础.

我有一个After Effect项目,其中包含两个AE项目,每个项目中都有多个项目.

我想从具有特定名称的主项目中获取合成但不循环遍历项目中的所有项目.例如,

var myComp = app.project.comp("Composition Name");
Run Code Online (Sandbox Code Playgroud)

这可能吗 ?还有其他方法吗?

after-effects extendscript composition

3
推荐指数
1
解决办法
4172
查看次数

当我们调用(char*)malloc(sizeof(char))为字符串分配内存时,它是否已初始化?如何初始化?

char* str = (char*)malloc(100*sizeof(char)); 
strcpy(str, ""); //Does this line initialize str to an empty string?
Run Code Online (Sandbox Code Playgroud)

在调用第1行之后,分配的内存是否包含垃圾?在拨打第2行之后怎么办?

c pointers initialization

3
推荐指数
1
解决办法
6245
查看次数

有没有GraphQL使用Relay的方法?

我正在我的React应用程序中尝试Relay,它默认使用GraphQL.它看起来像这样(Score是一些React.js组件):

Score = Relay.createContainer(Score, {
    fragments: {
        score: () => Relay.QL`
            fragment on Score {
                initials,
                score,
            }
        `,
    },
});
Run Code Online (Sandbox Code Playgroud)

问题是:我可以使用自定义API函数将数据返回到片段中吗?像这样:

Score = Relay.createContainer(Score, {
    fragments: {
        score: myCustomFunction(), // It will return a dataset.
    },
});
Run Code Online (Sandbox Code Playgroud)

reactjs graphql relayjs

3
推荐指数
1
解决办法
1389
查看次数