botbrew下写glib2程序

时间:2023-03-09 16:00:54
botbrew下写glib2程序

作者

He
YiJun – storysnail<at>hotmail.com

   

版权

转载请保留本声明!

本文档包含的原创代码根据General
Public License,v3 发布

GPLv3
许可证的副本可以在这里获得:http://www.gnu.org/licenses/gpl.html

本文档根据GNU
Free Documentation License 1.3发布

GFDL1.3许可证的副本可以在这里获得:http://www.gnu.org/licenses/gfdl.html

文中所引用的软件版权详见各软件版权具体声明,文中所提及的所有商标均为各自商标所有人的财产。
作者在此向所有提供过帮助和支持的朋友表示感谢!

更新

2014-11-10

本文已经停止更新

   

前言:

略...

一:配置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

最后是一张程序运行的截图

botbrew下写glib2程序