作者 |
He YiJun – storysnail<at>hotmail.com |
||||
版权 |
转载请保留本声明!
本文档包含的原创代码根据General
Public License,v3 发布
本文档根据GNU
Free Documentation License 1.3发布
文中所引用的软件版权详见各软件版权具体声明,文中所提及的所有商标均为各自商标所有人的财产。 |
||||
更新 |
|
前言:
略...
一:配置botbrew中的glib2函数库
1:
启动botbrew后,在其主界面选择安装libglib2.0、libglib2.0-bin、libglib2.0-dev、libglib2.0-doc
2:
安装好所需软件后,将下面的内容保存成glibconfig.h文件,进入终端模拟器,输入su,取得root权限,然后输入
cp glibconfig.h /botbrew/include/glib-2.0/ /************************************************************************************************** * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * glibconfig.h This file just for botbrew's glib2. Develop Team : ls Main Programmer : He YiJun (storysnail<at>gmail.com) License : GPL2 Last Update : 2013-06-15 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * **************************************************************************************************/ #ifndef __G_LIBCONFIG_H__ #define __G_LIBCONFIG_H__ #include <glib/gmacros.h> #include <limits.h> #include <float.h> #define GLIB_HAVE_ALLOCA_H #define GLIB_HAVE_SYS_POLL_H /* Specifies that GLib's g_print*() functions wrap the * system printf functions. This is useful to know, for example, * when using glibc's register_printf_function(). */ #define GLIB_USING_SYSTEM_PRINTF G_BEGIN_DECLS #define G_MINFLOAT FLT_MIN #define G_MAXFLOAT FLT_MAX #define G_MINDOUBLE DBL_MIN #define G_MAXDOUBLE DBL_MAX #define G_MINSHORT SHRT_MIN #define G_MAXSHORT SHRT_MAX #define G_MAXUSHORT USHRT_MAX #define G_MININT INT_MIN #define G_MAXINT INT_MAX #define G_MAXUINT UINT_MAX #define G_MINLONG LONG_MIN #define G_MAXLONG LONG_MAX #define G_MAXULONG ULONG_MAX typedef signed char gint8; typedef unsigned char guint8; typedef signed short gint16; typedef unsigned short guint16; #define G_GINT16_MODIFIER "h" #define G_GINT16_FORMAT "hi" #define G_GUINT16_FORMAT "hu" typedef signed int gint32; typedef unsigned int guint32; #define G_GINT32_MODIFIER "" #define G_GINT32_FORMAT "i" #define G_GUINT32_FORMAT "u" #define G_HAVE_GINT64 1 /*deprecated, always true */ G_GNUC_EXTENSION typedef signed long long gint64; G_GNUC_EXTENSION typedef unsigned long long guint64; #define G_GINT64_CONSTANT(val) (G_GNUC_EXTENSION (val##LL)) #define G_GUINT64_CONSTANT(val) (G_GNUC_EXTENSION (val##ULL)) #define G_GINT64_MODIFIER "ll" #define G_GINT64_FORMAT "lli" #define G_GUINT64_FORMAT "llu" #define GLIB_SIZEOF_VOID_P 4 #define GLIB_SIZEOF_LONG 4 #define GLIB_SIZEOF_SIZE_T 4 typedef signed int gssize; typedef unsigned int gsize; #define G_GSIZE_MODIFIER "" #define G_GSSIZE_FORMAT "i" #define G_GSIZE_FORMAT "u" #define G_MAXSIZE G_MAXUINT #define G_MINSSIZE G_MININT #define G_MAXSSIZE G_MAXINT typedef gint64 goffset; #define G_MINOFFSET G_MININT64 #define G_MAXOFFSET G_MAXINT64 #define G_GOFFSET_MODIFIER G_GINT64_MODIFIER #define G_GOFFSET_FORMAT G_GINT64_FORMAT #define G_GOFFSET_CONSTANT(val) G_GINT64_CONSTANT(val) #define GPOINTER_TO_INT(p) ((gint) (p)) #define GPOINTER_TO_UINT(p) ((guint) (p)) #define GINT_TO_POINTER(i) ((gpointer) (i)) #define GUINT_TO_POINTER(u) ((gpointer) (u)) typedef signed int gintptr; typedef unsigned int guintptr; #define G_GINTPTR_MODIFIER "" #define G_GINTPTR_FORMAT "i" #define G_GUINTPTR_FORMAT "u" #ifdef NeXT /*@#%@! NeXTStep */ # define g_ATEXIT(proc) (!atexit (proc)) #else # define g_ATEXIT(proc) (atexit (proc)) #endif #define g_memmove(dest,src,len) G_STMT_START { memmove ((dest), (src), (len)); } G_STMT_END #define GLIB_MAJOR_VERSION 2 #define GLIB_MINOR_VERSION 24 #define GLIB_MICRO_VERSION 2 #define G_OS_UNIX #define G_VA_COPY va_copy #ifdef __cplusplus #define G_HAVE_INLINE 1 #else /*!__cplusplus */ #define G_HAVE_INLINE 1 #define G_HAVE___INLINE 1 #define G_HAVE___INLINE__ 1 #endif /*!__cplusplus */ #ifdef __cplusplus #define G_CAN_INLINE 1 #else /*!__cplusplus */ #define G_CAN_INLINE 1 #endif #ifndef __cplusplus # define G_HAVE_ISO_VARARGS 1 #endif #ifdef __cplusplus # define G_HAVE_ISO_VARARGS 1 #endif /* gcc-2.95.x supports both gnu style and ISO varargs, but if -ansi * is passed ISO vararg support is turned off, and there is no work * around to turn it on, so we unconditionally turn it off. */ #if __GNUC__ == 2 && __GNUC_MINOR__ == 95 # undef G_HAVE_ISO_VARARGS #endif #define G_HAVE_GNUC_VARARGS 1 #define G_HAVE_GROWING_STACK 0 #define G_HAVE_GNUC_VISIBILITY 1 #if defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590) #define G_GNUC_INTERNAL __attribute__((visibility("hidden"))) #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) #define G_GNUC_INTERNAL __hidden #elif defined (__GNUC__) && defined (G_HAVE_GNUC_VISIBILITY) #define G_GNUC_INTERNAL __attribute__((visibility("hidden"))) #else #define G_GNUC_INTERNAL #endif #define G_THREADS_ENABLED #define G_THREADS_IMPL_POSIX typedef struct _GStaticMutex GStaticMutex; struct _GStaticMutex { struct _GMutex *runtime_mutex; union { char pad[24]; double dummy_double; void *dummy_pointer; long dummy_long; } static_mutex; }; #define G_STATIC_MUTEX_INIT { NULL, { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0} } } #define g_static_mutex_get_mutex(mutex) (g_thread_use_default_impl ? ((GMutex*)(gpointer) ((mutex)->static_mutex.pad)) : g_static_mutex_get_mutex_impl_shortcut (&((mutex)->runtime_mutex))) /* This represents a system thread as used by the implementation. An * alien implementaion, as loaded by g_thread_init can only count on * "sizeof (gpointer)" bytes to store their info. We however need more * for some of our native implementations. */ typedef union _GSystemThread GSystemThread; union _GSystemThread { char data[4]; double dummy_double; void *dummy_pointer; long dummy_long; }; #define G_ATOMIC_OP_MEMORY_BARRIER_NEEDED 1 #define GINT16_TO_LE(val) ((gint16) (val)) #define GUINT16_TO_LE(val) ((guint16) (val)) #define GINT16_TO_BE(val) ((gint16) GUINT16_SWAP_LE_BE (val)) #define GUINT16_TO_BE(val) (GUINT16_SWAP_LE_BE (val)) #define GINT32_TO_LE(val) ((gint32) (val)) #define GUINT32_TO_LE(val) ((guint32) (val)) #define GINT32_TO_BE(val) ((gint32) GUINT32_SWAP_LE_BE (val)) #define GUINT32_TO_BE(val) (GUINT32_SWAP_LE_BE (val)) #define GINT64_TO_LE(val) ((gint64) (val)) #define GUINT64_TO_LE(val) ((guint64) (val)) #define GINT64_TO_BE(val) ((gint64) GUINT64_SWAP_LE_BE (val)) #define GUINT64_TO_BE(val) (GUINT64_SWAP_LE_BE (val)) #define GLONG_TO_LE(val) ((glong) GINT32_TO_LE (val)) #define GULONG_TO_LE(val) ((gulong) GUINT32_TO_LE (val)) #define GLONG_TO_BE(val) ((glong) GINT32_TO_BE (val)) #define GULONG_TO_BE(val) ((gulong) GUINT32_TO_BE (val)) #define GINT_TO_LE(val) ((gint) GINT32_TO_LE (val)) #define GUINT_TO_LE(val) ((guint) GUINT32_TO_LE (val)) #define GINT_TO_BE(val) ((gint) GINT32_TO_BE (val)) #define GUINT_TO_BE(val) ((guint) GUINT32_TO_BE (val)) #define GSIZE_TO_LE(val) ((gsize) GUINT32_TO_LE (val)) #define GSSIZE_TO_LE(val) ((gssize) GINT32_TO_LE (val)) #define GSIZE_TO_BE(val) ((gsize) GUINT32_TO_BE (val)) #define GSSIZE_TO_BE(val) ((gssize) GINT32_TO_BE (val)) #define G_BYTE_ORDER G_LITTLE_ENDIAN #define GLIB_SYSDEF_POLLIN =1 #define GLIB_SYSDEF_POLLOUT =4 #define GLIB_SYSDEF_POLLPRI =2 #define GLIB_SYSDEF_POLLHUP =16 #define GLIB_SYSDEF_POLLERR =8 #define GLIB_SYSDEF_POLLNVAL =32 #define G_MODULE_SUFFIX "so" /* A GPid is an abstraction for a process "handle". It is *not* an * abstraction for a process identifier in general. GPid is used in * GLib only for descendant processes spawned with the g_spawn* * functions. On POSIX there is no "process handle" concept as such, * but on Windows a GPid is a handle to a process, a kind of pointer, * not a process identifier. */ typedef int GPid; #define GLIB_SYSDEF_AF_UNIX 1 #define GLIB_SYSDEF_AF_INET 2 #define GLIB_SYSDEF_AF_INET6 10 #define GLIB_SYSDEF_MSG_OOB 1 #define GLIB_SYSDEF_MSG_PEEK 2 #define GLIB_SYSDEF_MSG_DONTROUTE 4 G_END_DECLS #endif /*GLIBCONFIG_H */
二 编译运行glib2程序
关于glib2的程序在互联网上有很多,有一些显然已经过时了,但我在botbrew中编译时也依然可以通过,只是多了些该函数库已经过时的警告,下面给出一个简单的程序和makefile实例,搞程序的人还是用代码说话更直接。
/************************************************************************************************** * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * gtest.c Develop Team : ls Main Programmer : He YiJun (storysnail<at>gmail.com) License : GPLv3 Last Update : 2013-03-03 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * **************************************************************************************************/ #include <glib.h> int main(int argc, char *argv[]) { GRand *rand; GTimer *timer; gint n; gint i, j; gulong x = 0; //创建随机数对象后产生随机数并显示出来,之后释放随机数对象 rand = g_rand_new(); for(n=0; n<20; n++) { g_print("%d ",g_rand_int_range(rand,1,100)); } g_rand_free(rand); g_print(" "); //创建计时器,之后让机器忙等待,然后输出计时结果 timer = g_timer_new(); g_timer_start(timer); for(i=0; i<10000; i++) for(j=0; j<3650; j++) x++; g_timer_stop(timer); g_print("%ld all:%.2f seconds was used! ",x,g_timer_elapsed(timer,NULL)); return 0; }
#************************************************************************************************** #* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * # # Develop Team : ls # Programmer : He YiJun (storysnail<at>gmail.com ) # Comments : Ling Ying # License : GPLv3 # Last Update : 2013-02-14 #* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * #*************************************************************************************************/ all:gtest CC=gcc CFLAGS = -Wall -ggdb OBJFILES = gtest.o gtest:$(OBJFILES) $(CC) $(CFLAGS) -I/botbrew/include/glib-2.0-L/botbrew/lib -lm -lglib-2.0$(OBJFILES)-o gtest gtest.o:gtest.c $(CC)$(CFLAGS)-I/botbrew/include/glib-2.0-L/botbrew/lib -lm -lglib-2.0-c gtest.c -o gtest.o clean: rm -f *.o *~ gtest
最后是一张程序运行的截图