botbrew下写glib2程序


作者


He
YiJun – storysnail<at>gmail.com


团队


ls


版权


转载请保留本声明!

本文档包含的原创代码根据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 

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

时间: 2024-08-07 21:17:35

botbrew下写glib2程序的相关文章

使用Code::blocks在windows下写网络程序

使用Code::blocks在windows下写网络程序 作者 He YiJun – storysnail<at>gmail.com 团队 ls 版权 转载请保留本声明! 本文档包含的原创代码根据General Public License,v3 发布 GPLv3 许可证的副本可以在这里获得:http://www.gnu.org/licenses/gpl.html 本文档根据GNU Free Documentation License 1.3发布 GFDL1.3许可证的副本可以在这里获得:ht

对于在vs下写C++程序遇到:&gt;......\picture_2_3.cpp(4): fatal error C1083: 无法打开包括文件:“iostream.h”: No such file or directory 解决办法

1.在vs下C++数输入输出函数的头文件为: #include <iostream>     //注意这里没有.h作为头文件的标志. 引用输入输出时 std::cout<<image.size()<<'\t'<<image.type()<<'\n'; std::cout<<result.size()<<'\t'<<result.type()<<'\n'; 加上域名!!!!! 还有一点vs下不识别en

只用vs2008写qt程序

qt是一个c++的界面库,其特点就是其源码可以跨平台编译,这样在写自己的小工具时可以方便地在windows,mac或linux环境下移植了.在windows下写c++程序当然选vs,在mac下写程序当然用xcode,在linux下就完全控制台吧. 本人仅仅将其看成是一个c++的库,所以不想学习新的的IDE--qt creator,也不想去学qt designer,所以qt的预处理都需要自己用命令来折腾. Moc 从qt继承而来的类只要用了关键字 Q_OBJECT,都必须生成其对应的moc文件,命

解决 Delphi XE5 写Android程序的No resource identifier found for attribute... 错误【转】

原文:http://www.hxhlb.cn/article/32142aaeb67bbc05379369c3.html 那一天,我装上了RAD Studio XE5. 当天晚上,我就写了一个小小的Android程序. 但是,苦于没有好手机,没办法进行测试. 今天,下载了一晚上,终于把Android所有的sdk都安装上了,配置进XE5中 唉,用这么庞大的XE5来编写Android SDK 2.1版本的程序,我都觉得害羞... 废话不多说,下面我们来解决问题. XE5自带的SDK,是SDK4.2,

Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法

Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法 最近由于老师要求要在Ubuntu下QT上进程多线程服务器的开发,虽然只是单纯的调用qt的network模块,但是为了避免麻烦,我还是很操蛋的在QT下写控制台程序了,但是写完程序后运行时出现了如下情况. 程序运行了,但是控制台中居然只有一个光标在那儿跳啊跳.由于百度的姿势不对,废了好多时间,终于明白是因为qt creator不支持Gnome默认的终端gnome-terminal. 所以要换成XTerm的控制台. 具体的解决方式

cocos2dx c++ 在mac下写的中文注释,在win32下编译时不通过

今天遇到个奇怪的问题,在mac下写的程序,加的中文注释,编译没有问题,但是在win32下(使用的时vs2012, win7 64bit 系统)编译就总是报错 最后在中文注释后 加一个空格,或者 换行,就可以了,真心不能理解为啥-------- 问题截图: 问题解决截图: 求大神来解释解释其原因

win10下通过Anaconda安装TensorFlow-GPU1.3版本,并配置pycharm运行Mnist手写识别程序

折腾了一天半终于装好了win10下的TensorFlow-GPU版,在这里做个记录. 准备安装包: visual studio 2015: Anaconda3-4.2.0-Windows-x86_64: pycharm-community: CUDA:cuda_8.0.61_win10:下载时选择 exe(local) CUDA补丁:cuda_8.0.61.2_windows: cuDNN:cudnn-8.0-windows10-x64-v6.0;如果你安装的TensorFlow版本和我一样1.

linux下安装codeblocks及写完程序之后编译成功但无法运行的原因

一:在软件中心输入codeblocks,然后点击安装,等着装完就行了. 再按ctrl+alt+t 打开终端 输入 sudo apt-get install gcc 而后再输入sudo apt-get install g++ 最后打开codeblocks写个 helloworld 试试吧. 二:helloworld小程序写完后,也编译通过了,但是却无法运行,那么你再看看保存的地方吧,要是不是保存在linux下的文档了,而是保存在磁盘里的话就是造成不能运行的结果了,更改保存位置试试看呗. 以上仅是我

用纯函数式思维在Java8下写的一段奇葩程序

首先说一下什么是纯函数式.在我的理解,"纯函数式"用一句话就可以描述:Anything is value.--我的理解不一定准确,但我就是这么理解的. 就是所有的东西都是值--没有变量:包括函数在内都是值--是值,就可以传递(包括函数). 为什么说这段程序是奇葩呢? 其一.传统的Java是面向对象的,自从Java8中加入了lambda,Java就变成了"面向对象"和"函数式"两种方式的混合语言.这段程序全部使用lambda的语法来写,与平常写的J