成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

SylixOS之glib庫移植筆記

1.glib中間件

十余年的天柱網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整天柱建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“天柱網(wǎng)站設(shè)計”,“天柱網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

glib庫是Linux平臺下最常用的C語言函數(shù)庫,它具有很好的可移植性和實用性。

glib是GTK+和GNOME工程的基礎(chǔ)底層核心程序庫,是一個綜合用途的實用的輕量級的C程序庫,它提供C語言的常用的數(shù)據(jù)結(jié)構(gòu)的定義、相關(guān)的處理函數(shù),有趣而實用的宏,可移植的封裝和一些運行時機能,如事件循環(huán)、線程、動態(tài)調(diào)用、對象系統(tǒng)等的API。它能夠在類UNIX的操作系統(tǒng)平臺(如LINUX,HP-UNIX等),WINDOWS,OS2和BeOS等操作系統(tǒng)臺上運行。

2.移植思路

移植Linux中間件到SylixOS上的思路請參考《TN0029_SylixOS第三方中間件移植方法》。

3.移植實現(xiàn)

glib源碼包下載地http://ftp.gnome.org/pub/gnome/sources/glib/2.24/,使用的是glib-2.22.5.tar.gz。在Linux下編譯glib需要libffi的支持,所以需要先交叉編譯libffi庫,使用的是libffi-3.2.1.tar.gz。libffi源碼包下載地址:https://www.sourceware.org/libffi/。

3.1在Linux下生成配置文件

根據(jù)評估了解glib工程比較大,采用一般方法直接移植編譯問題太多,無法快速解決問題。在官網(wǎng)上了解glib庫整個工程又分成三個小的工程,如圖 31所示。

SylixOS之glib庫移植筆記

圖3-1 glib工程框架圖

根據(jù)glib工程框架圖可知,可以把整個分為三個模塊:libgio、libgobject和libglib三個部分。

把官網(wǎng)下載的源碼在Linux環(huán)境下編譯執(zhí)行,產(chǎn)生配置文件如圖 32所示。

SylixOS之glib庫移植筆記

圖 3-2  Linux環(huán)境生成配置文件

        自動配置產(chǎn)生了Makefile和config.h文件,這兩個是移植的關(guān)鍵。根據(jù)圖 31所示,把整個工程分成三個模塊,在自動配置時,在各個模塊下也生成各個模塊的配置文件,如圖 33、圖 34、圖 35所示。

SylixOS之glib庫移植筆記

圖 3-3  libgio工程配置

SylixOS之glib庫移植筆記

圖 3-4  libgobject工程配置

SylixOS之glib庫移植筆記

圖 3-5 libglib工程配置

        所以根據(jù)這三個模塊下的Makefile分別編譯libgio、libgobject和libglib這三個模塊,最后在把這三個模塊整合起來成為一個完整的glib庫工程。

這樣在Linux環(huán)境下生成了配置文件,然后把整個源碼包導(dǎo)出。

3.2移植到SylixOS

把源碼工程導(dǎo)入到RealEvo-IDE開發(fā)環(huán)境上進行開發(fā)編譯。

3.2.1創(chuàng)建libgio模塊工程

創(chuàng)建libgio工程,并把gio源碼導(dǎo)入工程如圖 36所示。

SylixOS之glib庫移植筆記

圖 3-6 libgio工程

    設(shè)置工程為專家模式,即手動修改Makefile。根據(jù)libgio模塊下的Makefile配置工程的gio.mk,如圖 37所示。然后編譯工程根據(jù)錯誤提示修改。

  SylixOS之glib庫移植筆記

圖 3-7 libgio的gio.mk配置

3.2.2創(chuàng)建libgobject模塊工程

創(chuàng)建libgobject工程,并把gobject源碼導(dǎo)入工程如圖 38所示。

SylixOS之glib庫移植筆記

圖 3-8  libgobject工程

設(shè)置工程為專家模式,即手動修改Makefile。根據(jù)libgobject模塊下的Makefile配置工程的gobject.mk,如圖 39所示。然后編譯工程根據(jù)錯誤提示修改。

SylixOS之glib庫移植筆記

圖 3-9 libobject的object.mk配置

3.2.3創(chuàng)建libglib模塊工程

創(chuàng)建libglib工程,并把libglib源碼導(dǎo)入工程如圖 310所示。

SylixOS之glib庫移植筆記

圖 3-10 libglib工程

    設(shè)置工程為專家模式,即手動修改Makefile。根據(jù)libglib模塊下的Makefile配置工程的glib.mk,如圖 311所示。然后編譯工程根據(jù)錯誤提示修改。

SylixOS之glib庫移植筆記

圖 3-11 libglib的glib.mk配置

當三個模塊編譯都能通過時,進行工程整合如圖 312所示。

SylixOS之glib庫移植筆記

圖 3-12 libglib工程整合

把三個工程的*.mk的配置整合到libglib.mk上,如圖 313所示。

SylixOS之glib庫移植筆記

圖 3-13 libglib.mk整合

這樣把三個工程整合起來初步編譯時通過的,然后進行功能測試時,慢慢完善工程。

3.2.5修改編譯錯誤

        1.

這邊有些頭文件加上這一句,因為這邊暫未定義GIO_COMPILATION宏。

#if!defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)

#error"Only <gio/gio.h> can be included directly."

#endif

編譯時經(jīng)常出現(xiàn)的錯誤,解決方法是在acoinfo.h中定義#define GIO_COMPILATION

__GIO_GIO_H_INSIDE__這個宏在gio.h中定義#define。

2.

GIO_MODULE_DIR(giomodule.c文件388行使用,未定義),這個在Linux下Makefile定義為安裝目錄下/lib/gio/modules的路徑,在acoinfo.h中#define GIO_MODULE_DIR      "/lib/modules";主要是為了加載路徑下的模塊。

3.

在glocalfileenumerator.c文件中使用dirent結(jié)構(gòu)體與系統(tǒng)沖突。dirent結(jié)構(gòu)體是存儲短文件名信息,與glib不吻合。為編譯使用,在acoinfo.h定義dirent結(jié)構(gòu)體。

SylixOS結(jié)構(gòu)體:

struct dirent {

   char                  d_name[NAME_MAX + 1];                      /* 文件名                */          

   unsignedchar        d_type;                                       /* 文件類型 (可能為 DT_UNKNOWN)*/

   char                d_shortname[13];                              /*  fat短文件名 (可能不存在)   */

   PVOID            *d_resv;                                       /* 保留                        */

};

重新定義(在Linux下找出來的):

struct acoinfo_dirent

{

        long            d_ino;                                     /* inode number索引節(jié)點號 */

        off_t           d_off;                                      /* offset to this dirent在目錄文件中的偏移 */

        unsignedshort   d_reclen;                                    /* length of this d_name文件名長 */

        unsignedchar   d_type;                                      /* the type of d_name文件類型 */

        char          d_name [NAME_MAX+1];                     /* file name (null-terminated)文件名,最長256字符 */

};

4.

times[0].tv_usec = statbuf.st_atim.tv_nsec / 1000;(glocalfileinfo.c文件2099行2132行974行985行996行)計算時間精度為微妙級,和Linux下不同,所以修改成SylixOS擁有的。

SylixOS結(jié)構(gòu)體

struct stat {

   dev_t        st_dev                                              /* device                       */

   ino_t        st_ino;                                              /* inode                        */

   mode_t       st_mode;                                            /* protection                   */

   nlink_t      st_nlink;                                              /* number of hard links         */

   uid_t        st_uid;                                              /* user ID of owner             */

   gid_t        st_gid;                                              /* group ID of owner            */

   dev_t        st_rdev;                                             /* device type (if inode device)*/

   off_t        st_size;                                               /* total size, in bytes         */

   time_t       st_atime;                                              /* time of last access          */

   time_t       st_mtime;                                            /* time of last modification    */

   time_t       st_ctime;                                              /* time of last create          */

   blksize_t    st_blksize;                                             /* blocksize for filesystem I/O */

   blkcnt_t      st_blocks;                                             /* number of blocks allocated   */  

   void         *st_resv1;

   void         *st_resv2;

   void         *st_resv3;

};

Linux結(jié)構(gòu)體

struct stat {

        unsignedlong        st_dev;                                                      /* Device.  */

        unsignedlong        st_ino;                                                   /* File serial number.  */

        unsignedint      st_mode;                                                 /* File mode.  */

        unsignedint      st_nlink;                                                  /* Link count.  */

        unsignedint      st_uid;                                                    /* User ID of the file's owner.  */

        unsignedint      st_gid;                                                    /* Group ID of the file's group. */

        unsignedlong    st_rdev;                                                   /* Device number, if device.  */

        unsignedlong        __pad1;

        long                  st_size;                                                /* Size of file, in bytes.  */

        int                   st_blksize;                                               /* Optimal block size for I/O.  */

        int                __pad2;

        long                  st_blocks;                                                /* Number 512-byte blocks allocated. */

        long                   st_atime;                                                  /* Time of last access.  */

        unsignedlong        st_atime_nsec;

        long                   st_mtime;                                                /* Time of last modification.  */

        unsignedlong        st_mtime_nsec;

        long                  st_ctime;                                                   /* Time of last status change.  */

        unsignedlong        st_ctime_nsec;

        unsignedint      __unused4;

        unsignedint      __unused5;

};

5.

我們系統(tǒng)下沒有l(wèi)ibintl.h頭文件,主要是用作數(shù)據(jù)窗口控件的。SylixOS暫時不支持,所以在config.h中關(guān)閉宏ENABLE_NLS。

6.

SylixOS之glib庫移植筆記
本文地址:http://jinyejixie.com/article0/iisjoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、網(wǎng)頁設(shè)計公司、關(guān)鍵詞優(yōu)化全網(wǎng)營銷推廣、Google、網(wǎng)站策劃

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
垫江县| 北碚区| 商丘市| 鲁山县| 沽源县| 锦屏县| 建昌县| 梁平县| 新安县| 平顶山市| 普格县| 乐业县| 衢州市| 广昌县| 华阴市| 武宣县| 水富县| 沙洋县| 肇东市| 赤水市| 延吉市| 怀仁县| 红原县| 东乡| 崇文区| 滨州市| 红安县| 怀化市| 信宜市| 民县| 泸水县| 昭觉县| 柞水县| 错那县| 南皮县| 图片| 锦州市| 固阳县| 凌源市| 门头沟区| 仙居县|