Linux下静态编译glib

本文介绍如何从源码编译glib为静态库,并将其应用到项目中。主要内容包括下载、编译和安装glib的过程,以及如何设置环境变量使编译器能够正确找到库文件和头文件。

  glib是gtk下的一个库,也是开发中常用的一个工具库。glib提供的基本的数据结构和算法(只说我现在用到的),例如更有效的内存管理、配置文件处理、异步队列、哈希表、字符串处理、编码转换等。它就像野外生存的瑞士军刀,一个日常开发过程中不可多得的利刃。当然完全抛弃,独立实现也可以,我之前就是这样做的,各有好处。

  但是,在服务器操作系统中并不总自带有glib库,总要经常安装,因此如果能编译成静态库连接到程序,这样最好。经过一番努力,我已经成功,现把简要过程写在下面,随意分享。

1.下载、编译、安装

wget http://ftp.gnome.org/pub/gnome/sources/glib/2.22/glib-2.22.5.tar.gz

tar zxvf glib-2.22.5.tar.gz

cd glib-2.22.5

./configure --prefix=/usr/local/glib --enable-static --disable-shared CFLAGS="-static"

make && make install

说明:

--prefix指定安装到目录,不要与系统中已安装的glib混淆。

--enable-static --disable-shared CFLAGS="-static"使得编译出静态库.a文件。

 

重点

export PKG_CONFIG_PATH=/usr/local/glib/lib/pkgconfig:$PKG_CONFIG_PATH

pkg-config --libs glib-2.0 gthread-2.0

pkg-config --cflags glib-2.0 gthread-2.0

说明:

第一句使用是让pkg-config找到新编译的glib库及头文件,后两句是通过pkg-config分别获取头文件地址和库地址。

此外,也可将--prefix/lib/pkgconfig下的文件拷贝到/lib/pkgconfig下,让pkg-config自动搜索到,但会覆盖之前已安装在标准目录下的的glib的相关文件。

2.使用与测试

 编辑main.c

 1 #include <stdio.h>
 2 #include <glib.h>
 3 
 4 void main()
 5 {
 6         g_thread_init(NULL);
 7         puts("hello");
 8         printf("Glib version: %u.%u.%u\n\n",
 9                 glib_major_version,
10                 glib_minor_version,
11                 glib_micro_version);
12 }

 

编辑test.sh:

#! /bin/bash

export PKG_CONFIG_PATH=/usr/local/glib/lib/pkgconfig:$PKG_CONFIG_PATH

gcc main.c -o glibtest `pkg-config --libs glib-2.0 gthread-2.0` `pkg-config --cflags glib-2.0 gthread-2.0`

 

执行

chmod +x test.sh

./test.sh

./glibtest

 

输出

hello

Glib version: 2.22.5

 

3.使用

在调用glib库函数之前需要调用g_thread_init(NULL)(涉及到线程操作时),但在glib-2.32以后则不需要此调用,可直接调用与线程相关的操作。

转载于:https://www.cnblogs.com/tiantao/archive/2012/04/23/2466942.html

### 配置 Linux 下 QT Arm 静态交叉编译环境 #### 一、准备工作 为了在 Linux 系统下配置 QT Arm 的静态交叉编译环境,需要完成以下准备事项: 1. 安装适合目标平台的交叉编译工具链。例如 `arm-linux-gnueabihf` 或者其他指定版本的交叉编译器[^3]。 2. 设置必要的环境变量以便系统能够识别到所使用的交叉编译工具链。 以下是具体的环境变量设置示例: ```bash export ARCH=arm export CROSS_COMPILE=arm-linux-gnueabihf- export PATH=$PATH:/path/to/toolchain/bin ``` 其中 `/path/to/toolchain/bin` 是实际安装的交叉编译工具链所在的目录位置。 #### 二、修改 QMake 配置文件 对于特定的目标硬件架构(如 ARM),需调整 Qt 提供的标准模板以适配当前需求。具体操作为编辑位于 `mkspecs/qws/linux-arm-g++/qmake.conf` 文件中的相关内容,将默认的编译器名称替换为目标设备对应的交叉编译器名。例如: 原内容可能是类似于这样的形式: ```plaintext QMAKE_CC = gcc QMAKE_CXX = g++ ``` 将其改为对应于您的交叉编译器的形式,比如: ```plaintext QMAKE_CC = arm-9tdmi-linux-gnu-gcc QMAKE_CXX = arm-9tdmi-linux-gnu-g++ ``` 此更改确保后续构建过程中调用了正确的编译器来生成适用于目标ARM处理器体系结构的应用程序代码[^1]。 #### 三、执行 Qt 源码重新编译过程 当上述步骤完成后即可启动针对嵌入式Linux系统的Qt库定制化编译流程。通过运行 configure 脚本来定义一系列选项参数从而满足项目特殊要求下的功能裁剪以及优化设置。下面给出了一组典型的命令行参数作为参考实例之一: ```bash ./configure \ -v \ -prefix /install/path/qt5-static-arm \ -static \ -release \ -opensource \ -confirm-license \ -xplatform linux-arm-gnueabi-g++ \ -no-accessibility \ -no-dbus \ -no-openssl \ -no-opengl \ -no-glib \ -no-iconv \ -no-xcb \ -no-pch \ -no-compile-examples \ -no-pkg-config \ -skip qtquickcontrols \ -skip qtquickcontrols2 \ -skip qtsensors \ -skip qtdoc \ -skip qtwayland ``` 这里 `-xplatform` 参数指定了用于描述目标平台特性的 mkspec 名称;而诸如 `-no-*` 开头的各项开关则关闭了一些不必要的模块支持以减少最终产物体积并加快整体处理速度[^4]。 最后,在确认无误的情况下继续进行常规 make 和 install 步骤即完成了整个静态链接版本的 Qt 库创建工作。 #### 四、验证新Kit可用性 如果一切顺利的话,则可以回到 IDE (Integrated Development Environment) 如 Qt Creator 中新增加一个基于刚才自定义好的 Tool Chain Information 所构成的新 Kit Profile 。记得同步勾选关联起来的相关 Compiler Settings 和 Debugger Options 后保存退出再尝试新建测试工程项目加以检验其有效性[^5]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值