botbrew下写glib2程序
作者
|
He
YiJun – storysnailgmail.com
|
团队
|
ls
|
版权
|
转载请保留本声明!
本文档包含的原创代码根据General
Public License,v3 发布
GPLv3 许可证的副本可以在这里获得:
本文档根据GNU
Free Documentation License 1.3发布
GFDL1.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\t",g_rand_int_range(rand,1,100));
-
}
-
g_rand_free(rand);
-
g_print("\n");
-
//创建计时器,之后让机器忙等待,然后输出计时结果
-
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\tall:%.2f seconds was used!\n",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
最后是一张程序运行的截图
阅读(1240) | 评论(0) | 转发(0) |