在用cocos2d-x3.2 + protobuf編譯Android項(xiàng)目的時(shí)候,,protobuf出現(xiàn)了兩個問題:
1. 首先是config.h找不到,,查閱自后說是通過命令或工具生成的,,里面的內(nèi)容根據(jù)不同平臺是不一樣的(引用一些用到的庫,,例如hash_map,hash_set等,,和部分宏定義),,那么就要在自己手動生成,,或者自己創(chuàng)建一個空的config,自己把一些引用到的庫加進(jìn)去,,為了能快速編譯通過,,我就自己創(chuàng)建了一個config.h,沒有引用任何庫,。
然后找不到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
發(fā)現(xiàn)是找不到HAVE_PTHREAD宏定義,導(dǎo)致沒有引用pthread庫,,直接用#include <pthread.h>替換#error "No suitable threading library available."這句代碼,,又會導(dǎo)致其他文件找不到;那么可能其它地方也引用了HAVE_PTHREAD宏,,那這個宏是protobuf庫根據(jù)不同平臺定義的呢,,還是該我們自己加呢,如果是自己加又應(yīng)該加在哪里呢,?
聯(lián)想到config文件找不到的問題,,猜到可能是config文件中缺少一些代碼,看來不能用空的config,,那么就直接在config.h中加上 #define HAVE_PTHREAD 即可,。
之后編譯通過。,。,。
如果是有完美強(qiáng)迫癥的、或者要求高效率(使用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 to 1 if you have the <fcntl.h> header file. */
/* Define to 1 if you have the `ftruncate' function. */
/* define if the compiler has hash_map */
/* define if the compiler has hash_set */
/* 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 to 1 if you have the <memory.h> header file. */
/* Define to 1 if you have the `memset' function. */
/* Define to 1 if you have the `mkdir' function. */
/* Define if you have POSIX threads libraries and header files. */
/* Define to 1 if you have the <stdint.h> header file. */
/* Define to 1 if you have the <stdlib.h> header file. */
/* Define to 1 if you have the `strchr' function. */
/* Define to 1 if you have the `strerror' function. */
/* Define to 1 if you have the <strings.h> header file. */
/* Define to 1 if you have the <string.h> header file. */
/* Define to 1 if you have the `strtol' function. */
/* 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. */
/* Enable classes using zlib compression. */
/* Define to the sub-directory in which libtool stores uninstalled libraries. #define LT_OBJDIR ".libs/"
#define PACKAGE "protobuf"
/* Define to the address where bug reports for this package should be sent. */
/* 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 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 /* #undef PTHREAD_CREATE_JOINABLE */
/* Define to 1 if you have the ANSI C header files. */
/* Enable extensions on AIX 3, Interix. */ /* Enable GNU extensions on systems that have them. */ /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # define _POSIX_PTHREAD_SEMANTICS 1 /* Enable extensions on HP NonStop. */ # define _TANDEM_SOURCE 1 /* Enable general extensions on Solaris. */ # define __EXTENSIONS__ 1
/* Version number of package */
/* Define to 1 if on MINIX. */
/* Define to 2 if the system does not provide POSIX.1 features except with /* #undef _POSIX_1_SOURCE */
/* Define to 1 if you need to in order for `stat' and other things to work. */ /* #undef _POSIX_SOURCE */
|