• 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.0libglib2.0-binlibglib2.0-devlibglib2.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 



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









  • 相关阅读:
    Centos 7 安装shellcheck
    cunit环境搭建
    flex序列号和破解
    windows下python SSH-Client模块paramiko的安装与修改
    history优化设置
    shell配置和vim配置
    testlink 安装方法
    python解析GBK格式xml文件
    运用Loadrunner测试Mysql数据库性能 TRON•极客
    写python用到的一些大杀器
  • 原文地址:https://www.cnblogs.com/arely/p/4416129.html
Copyright © 2020-2023  润新知