[已解决] windows 编译 C 报错 error mutex in namespace std does not name a type

Windows 下 编译C/C++ 程序报错:error: ‘mutex’ in namespace ‘std’ does not name a type 怎么解决,换MinGW

问题

编译C++程序时,报错:

error: 'mutex' in namespace 'std' does not name a type

解决否

以解决

方案

这个是 Windows 安装的 MinGW 多线程选择问题,这里需要的是posix版本,而不是win32的多线程方案。

在使用 mingw x64 install 程序时,选择

install

参考

  • https://www.jianshu.com/p/c3411fe5b19c
  • https://stackoverflow.com/questions/14191566/c-mutex-in-namespace-std-does-not-name-a-type

C++ ProtoBuf 安装并使用

步骤

  1. 下载ProtoBuf源文件
  2. 准备编译环境
  3. 编译并配置环境变量
  4. ProtoBuf Demo编码

下载

github ProtoBuf,这里选择cpp版本。

编译安装ProtoBuf

编译安装


./configure --disable-shared x86_64-apple-darwin17.7.0 --prefix=/Users/paulxu/Jumei/compose/PicsToPdf/gcc/protobuf-build/ ## make clean # optional make -j2 # 双倍编译 make install

配置环境

export PKG_CONFIG_PATH="/Users/paulxu/Jumei/compose/PicsToPdf/gcc/protobuf-3.7.1"

ProtoBuf C++ Demo编码

编译

g++ `pkg-config --cflags --libs protobuf`    -std=c++11 -v ./lm.helloworld.pb.cc ./proto_test1.cpp  -o proto_test1.o

使用

编写一个模版

syntax = "proto3";

package Demo;

message Files {
    repeated File file = 1;
}

message File {
    string fileName = 1;
    uint32 fileSize = 2;
    string ext = 3;
    bytes data = 4;
}

编译模版

protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto

常见问题

  1. Please use ‘syntax = “proto2”;’ or ‘syntax = “proto3”;’ to specify a syntax version.

方案:这个是*.proto文件语法问题,如果你下载ProtoBuf3.*版本,为了和ProtoBuf2.*区别开来,就会有这样的提示,要求你在第一行加上提示信息就行了。

  1. 编译Demo过程中有很多语法检查报错。

方案:新版本ProtoBuf基于C++11,使用了新特性以及语法,所以在编译测试代码时,需要加上-std=c++11 就行了。

  1. undefined reference to `google::protobuf::Message::SerializeToOstream(std::ostream*) const’

方案:这个是包include路径配置不完整,需要完善。

  1. mac ld: symbol(s) not found for architecture x86_64

方案:编译时,需要把 *.pb.c 就是模版文件生成的目标文件带上。