在用cocos2d-x3.2 + protobuf编译Android项目的时候,protobuf出现了两个问题:

1. 首先是config.h找不到,查阅自后说是通过命令或工具生成的,里面的内容根据不同平台是不一样的(引用一些用到的库,例如hash_map,hash_set等,和部分宏定义),那么就要在自己手动生成,或者自己创建一个空的config,自己把一些引用到的库加进去,为了能快速编译通过,我就自己创建了一个config.h,没有引用任何库。

#ifndef _LINUX_CONFIG_H
#define _LINUX_CONFIG_H #endif

然后找不到config.h的问题解决了。

2.  然后是error "No suitable threading library available."

定位到common.cc文件中

#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN // We only need minimal includes
#include <windows.h>
#define snprintf _snprintf // see comment in strutil.cc
#elif defined(HAVE_PTHREAD)
#include <pthread.h>
#else
#error "No suitable threading library available."
#endif

发现是找不到HAVE_PTHREAD宏定义,导致没有引用pthread库,直接用#include <pthread.h>替换#error "No suitable threading library available."这句代码,又会导致其他文件找不到;那么可能其它地方也引用了HAVE_PTHREAD宏,那这个宏是protobuf库根据不同平台定义的呢,还是该我们自己加呢,如果是自己加又应该加在哪里呢?

联想到config文件找不到的问题,猜到可能是config文件中缺少一些代码,看来不能用空的config,那么就直接在config.h中加上 #define HAVE_PTHREAD 即可。

#ifndef _LINUX_CONFIG_H
#define _LINUX_CONFIG_H #define HAVE_PTHREAD #endif

之后编译通过。。。

如果是有完美强迫症的、或者要求高效率(使用hash_map/unordered_map等),那么就在linux上用configure生成一个config.h吧,下面附上一个完整生成的:

/* config.h.  Generated from config.h.in by configure.  */
/* config.h.in. Generated from configure.ac by autoheader. */ /* the name of <hash_map> */
#define HASH_MAP_CLASS hash_map /* the location of <unordered_map> or <hash_map> */
#define HASH_MAP_H <ext/hash_map> /* the namespace of hash_map/hash_set */
#define HASH_NAMESPACE std::tr1 /* the name of <hash_set> */
#define HASH_SET_CLASS hash_set /* the location of <unordered_set> or <hash_set> */
#define HASH_SET_H <ext/hash_set> /* Define to 1 if you have the <dlfcn.h> header file. */
#define HAVE_DLFCN_H 1 /* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1 /* Define to 1 if you have the `ftruncate' function. */
#define HAVE_FTRUNCATE 1 /* define if the compiler has hash_map */
#define HAVE_HASH_MAP 1 /* define if the compiler has hash_set */
#define HAVE_HASH_SET 1 /* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1 /* Define to 1 if you have the <limits.h> header file. */
#define HAVE_LIMITS_H 1 /* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1 /* Define to 1 if you have the `memset' function. */
#define HAVE_MEMSET 1 /* Define to 1 if you have the `mkdir' function. */
#define HAVE_MKDIR 1 /* Define if you have POSIX threads libraries and header files. */
#define HAVE_PTHREAD 1 /* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1 /* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1 /* Define to 1 if you have the `strchr' function. */
#define HAVE_STRCHR 1 /* Define to 1 if you have the `strerror' function. */
#define HAVE_STRERROR 1 /* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1 /* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1 /* Define to 1 if you have the `strtol' function. */
#define HAVE_STRTOL 1 /* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1 /* Enable classes using zlib compression. */
/* #undef HAVE_ZLIB */ /* Define to the sub-directory in which libtool stores uninstalled libraries.
*/
#define LT_OBJDIR ".libs/" /* Name of package */
#define PACKAGE "protobuf" /* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "protobuf@googlegroups.com" /* Define to the full name of this package. */
#define PACKAGE_NAME "Protocol Buffers" /* Define to the full name and version of this package. */
#define PACKAGE_STRING "Protocol Buffers 2.5.0" /* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "protobuf" /* Define to the home page for this package. */
#define PACKAGE_URL "" /* Define to the version of this package. */
#define PACKAGE_VERSION "2.5.0" /* Define to necessary symbol if this constant uses a non-standard name on
your system. */
/* #undef PTHREAD_CREATE_JOINABLE */ /* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1 /* Enable extensions on AIX 3, Interix. */
#ifndef _ALL_SOURCE
# define _ALL_SOURCE 1
#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# define _GNU_SOURCE 1
#endif
/* Enable threading extensions on Solaris. */
#ifndef _POSIX_PTHREAD_SEMANTICS
# define _POSIX_PTHREAD_SEMANTICS 1
#endif
/* Enable extensions on HP NonStop. */
#ifndef _TANDEM_SOURCE
# define _TANDEM_SOURCE 1
#endif
/* Enable general extensions on Solaris. */
#ifndef __EXTENSIONS__
# define __EXTENSIONS__ 1
#endif /* Version number of package */
#define VERSION "2.5.0" /* Define to 1 if on MINIX. */
/* #undef _MINIX */ /* Define to 2 if the system does not provide POSIX.1 features except with
this defined. */
/* #undef _POSIX_1_SOURCE */ /* Define to 1 if you need to in order for `stat' and other things to work. */
/* #undef _POSIX_SOURCE */

  

cocos2d-x, protobuf, no config.h, #error "No suitable threading library available."的更多相关文章

  1. React Native 'config.h' file not found 问题、 'glog/logging.h' file not found 问题、configure: error: C compiler cannot create executables问题解决过程记录

    1.在github 上面 git clone 一个RN 项目代码,npm install (yarn)后,准备运行iOS工程,发现'config.h' file not found ,恶心!!! 百度 ...

  2. mwc config.h 中文注释

    #ifndef CONFIG_H_ #define CONFIG_H_ /*************************************************************** ...

  3. 'config.h' file not found 解决过程

    最近将ReactNative业务集成进现有APP项目中,出现了几个具有代表性的问题,下面记录一下 问题1. [!] CocoaPods could not find compatible versio ...

  4. [/usr/local/openssl//.openssl/include/openssl/ssl.h] Error 127

    /bin/sh: line 2: ./config: No such file or directorymake[1]: *** [/usr/local/ssl/.openssl/include/op ...

  5. [pjsip]Pjlib中配置文件config.h解析

    config_site.h 这个头文件包含在config.h中,用于引入平台?(site)/用户特定的配置以控制PJLIB的特性,用户需要自己生成这个文件. 譬如说我们要把PJLIB编译成DLL,那么 ...

  6. Linux Makefile自动生成--config.h

    Linux Makefile自动生成--config.h http://blog.csdn.net/spch2008/article/details/12510805

  7. 微信报错 config:fail.Error:invalid signature

    config:fail.Error:invalid signature 微信公众号报这个错,appid等各项都配置好,经过一番折腾,发现原来ip白明单设置了不是该服务器的ID,重新设置后就可以了

  8. u-boot 2011.09 使用自己的board 以及config.h

    一个新的方案,用的UBOOT 可能和上一个方案是同一个,但是配置有可能不一样,今天记录一下通过修改配置文件使用新的 board 文件以及 config.h 进入 u-boot 2011.09 // 打 ...

  9. 在新版linux上编译老版本的kernel出现kernel/timeconst.h] Error 255

    在使用ubuntu16.4编译Linux-2.6.31内核时出现这样的错误 可以修改timeconst.pl的内容后正常编译. 以下是编译错误提示的内容: Can't use 'defined(@ar ...

随机推荐

  1. Sqoop 命令

    1)list-databases     List available databases on a server sqoop list-databases --connect jdbc:db2:// ...

  2. JS代码格式化修改表格的数值的格式

    今天在cognos中第一次需要用到JS,主要是报表页面展示的时候是可能得到如下的数据 ,我需要对其中类型中有金额字样的,后面的数值,精确2位小数:有百分比字样的,数值显示成百分比.如下. 我先尝试了自 ...

  3. POJ 2253 Frogger (dijkstra 最大边最小)

    Til the Cows Come Home 题目链接: http://acm.hust.edu.cn/vjudge/contest/66569#problem/A Description The i ...

  4. AutoCAD.NET二次开发:创建自定义菜单的两种方法比较

    目前我已经掌握的创建CAD菜单方法有两种: COM方式: http://www.cnblogs.com/bomb12138/p/3607929.html CUI方式: http://www.cnblo ...

  5. [iOS UI进阶 - 3.1] 触摸事件的传递

    A.事件的产生和传递 发生触摸事件后,系统会将该事件加入到一个由UIApplication管理的事件队列中UIApplication会从事件队列中取出最前面的事件,并将事件分发下去以便处理,通常,先发 ...

  6. 提高Scrum站会效率的一个小工具

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:提高Scrum站会效率的一个小工具.

  7. MVC4学习过程记录

    终于决定开始尝试Web开发,即是为了工作也是为了自己的兴趣,决定还是从MS的MVC4开始. 首先从Asp.Net MVC4入门指南这个系列开始学习(http://www.cnblogs.com/pow ...

  8. js字符串常用判断方法

    转自:http://blog.sina.com.cn/s/blog_6819fa800100j5t6.html 一.方法介绍 function obj$(id)                     ...

  9. 方法javaJVM学习笔记-内存处理

    本文是一篇关于方法java的帖子 大多数JVM将内存区域分离为Method Area(Non-Heap),Heap,Program Counter Register,Java Method Statc ...

  10. ios开发——仿新版iBooks书本打开与关闭动画

    IOS新版iBooks吸引人的地方除了有干净整洁的界面.方便灵活的操作以及大容量的书籍容量以外.还有其优秀的用户交互,尤其是其动画的使用.打开一本书时书本缓慢放大并打开.关闭一本书后书本关闭并回到原位 ...