windows编译glib
Ⅰ C语言中的g_free和free的区别,有没有网址可以查看到g_free的定义
g_free是glib库的接口,可以用来替换标准的free接口,使用时需要包含glib.h头文件。
glib库是Linux平台下最常用的C语言函数库,它具有很好的可移植性和实用性。
glib是Gtk +库和Gnome的基础。glib可以在多个平台下使用,比如Linux、Unix、Windows等。glib为许多标准的、常用的C语言结构提供了相应的替代物。
g_free的定义可以在
http://web.mit.e/barnowl/share/gtk-doc/html/glib/glib-Memory-Allocation.html#g-free这个网站看到。
请采纳,谢谢。
Ⅱ 手把手教你搭建ARM32 QEMU环境
了解嵌入式开发调试中硬件投入与携带繁琐的问题,Qemu模拟器提供了一种解决方案,尤其适用于内核方面的调试工作。本指南旨在手把手教你搭建QEMU环境,实现无需频繁在开发板上烧写版本,即可进行有效的调试。
注意:本文不包含对Uboot的模拟,因此在本篇内容中不会涉及Uboot启动内核的过程。
搭建环境需满足以下条件:
- PC系统:Windows 10
- 虚拟机:VMware-17
- 虚拟机系统:Ubuntu-18.04.1
- 模拟的32位开发板:vexpress-a9
具体步骤如下:
下载与编译QEMU
确保本地环境Python版本大于3.8,并安装glib2.0环境依赖。
配置与编译QEMU
配置QEMU源码,指定ARM32架构,后续可扩展到其他架构。
创建编译目录,进行配置,指定编译的指令集。
下载与编译Linux Kernel
从kernel.org官网下载Linux Kernel源码(如5.10版本),解压。
进入kernel目录,修改顶层Makefile中的ARCH和CROSS_COMPILE配置。
使用vexpress_defconfig配置单板,生成.config文件。
解决缺少工具链的错误,安装lib32库。
编译与安装Linux Kernel
编译并生成zImage和ko文件。
使用Busybox制作根文件系统
下载并解压Busybox源码,配置文件系统。
编译Busybox,并安装文件系统至_install目录。
创建rootfs目录,存放文件系统内容,包括Busybox和工具链库。
使用dd命令生成SD卡镜像,并格式化ext4文件系统。
将rootfs目录下的文件复制至/mnt。
QEMU模拟内核启动
执行启动命令,进入系统。
使用组合键CTRL + a,松开后按x键退出QEMU。
本指南由Linux底层爱好者潘小帅编写,提供技术原创文章,并分享徒步、旅游和电影爱好。欢迎通过点赞、收藏和关注支持作者。
文章首发于微信公众号[Linux随笔录]。
Ⅲ 我用VB制作了一个DLL文件,为什么C#调用不了
转来地: 调用DLL,首先需要将DLL文件映像到用户进程的地址空间中,然后才能进行函数调用,这个函数和进程内部一般函数的调用方法相同。Windows提供了两种将DLL映像到进程地址空间的方法:1. 隐式的加载时链接这种方法需要DLL工程经编译产生的LIB文件,此文件中包含了DLL允许应用程序调用的所有函数的列表,当链接器发现应用程序调用了LIB文件列出的某个函数,就会在应用程序的可执行文件的文件映像中加入一些信息,这些信息指出了包含这个函数的DLL文件的名字。当这个应用程序运行时,也就是它的可执行文件被操作系统产生映像文件时,系统会查看这个映像文件中关于DLL的信息,然后将这个DLL文件映像到进程的地址空间。系统通过DLL文件的名称,试图加载这个文件到进程地址空间时,它寻找DLL 文件的路径按照先后顺序如下:·程序运行时的目录,即可执行文件所在的目录;·当前程序工作目录·系统目录:对于Windows95/98来说,可以调用GetSystemDirectory函数来得到,对于WindowsNT/2000来说,指的是32位Windows的系统目录,也可以调用GetSystemDirectory函数来得到,得到的值为SYSTEM32。·Windows目录·列在PATH环境变量中的所有目录VC中加载DLL的LIB文件的方法有以下三种:①LIB文件直接加入到工程文件列表中在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中“Add Files to Project”菜单,在弹出的文件对话框中选中要加入DLL的LIB文件即可。②设置工程的 Project Settings来加载DLL的LIB文件打开工程的 Project Settings菜单,选中Link,然后在Object/library moles下的文本框中输入DLL的LIB文件。③通过程序代码的方式加入预编译指令#pragma comment (lib,”*.lib”),这种方法优点是可以利用条件预编译指令链接不同版本的LIB文件。因为,在Debug方式下,产生的LIB文件是Debug版本,如Regd.lib;在Release方式下,产生的LIB文件是Release版本,如Regr.lib。当应用程序对DLL的LIB文件加载后,还需要把DLL对应的头文件(*.h)包含到其中,在这个头文件中给出了DLL中定义的函数原型,然后声明。2 显式的运行时链接隐式链接虽然实现较简单,但除了必须的*.dll文件外还需要DLL的*.h文件和*.lib文件,在那些只提供*.dll文件的场合就无法使用,而只能采用显式链接的方式。这种方式通过调用API函数来完成对DLL的加载与卸载,其能更加有效地使用内存,在编写大型应用程序时往往采用此方式。这种方法编程具体实现步骤如下:①使用Windows API函数Load Library或者MFC提供的AfxLoadLibrary将DLL模块映像到进程的内存空间,对DLL模块进行动态加载。②使用GetProcAddress函数得到要调用DLL中的函数的指针。③不用DLL时,用Free Library函数或者AfxFreeLibrary函数从进程的地址空间显式卸载DLL。例:在应用程序中调用dll文件 ——在应用程序中要首先装入dll后才能调用导出表中的函数,例如用mfc 创建基于对话框的工程test,并在对话框上放置"load"按钮,先添加装载代码。1.首先在testdlg.cpp的首部添加变量设置代码: //设置全局变量glibsample用于存储dll句柄 hinstance glibsample=null; //第二个变量showme是指向dll 库中showme()函数的指针 typedef int(* showme)(void); showme showme; 2.利用classwizard为"load"按钮添加装载dll的代码 void ctestdlg::onloadbutton() { //要添加的代码如下 if(glibmydll!=null) { messagebox("the sample.dll has already been load."); return; } //装载sample.dll,未加路径,将在三个默认路径中寻找 (1)windows的系统目录:\windows\system; //(2)dos中path所指出的任何目录; //(3)程序所在的目录; glibsample=loadlibrary("sample.dll"); //返回dll中showme()函数的地址 showme=(showme)GetProcAddress(glibsample,"showme");
Ⅳ 怎么在 windows 下编译 pidgin-lwqq
参考lwqq/wiki配置好编译环境
下载lwqq并放在lwqq_root/lwqq目录下并编译
新建的文件夹必须为build,查找路径是写死了的
使用 cmake .. -G "MSYS Makefiles" -DWIN32_LIBS_DIR=... -DWITH_LIBUV=Off -DWITH_LIBEV=Off 编译.因为异步直接使用pidgin内置的支持来完成
从这里下载pidgin的源代码,并且解压缩到lwqq_root/pidgin目录下,根据BuildWinPidgin编译Windows版本的Pidgin(其实主要是为了获取libpurple)
pidgin/win32/gtkdocklet-win32.c
pidgin/win32/gtkwin32dep.c
pidgin/win32/wspell.c 在 #include <windows.h> 前面添加 #include "internal.h"
pidgin/plugins/win32/winprefs/winprefs.c 将 #include "internal.h" 放在 #include <gtk/gdkwin32.h> 前面
为了方便可以直接将下面的文本复制为patch.sh,放在pidgin目录下并用 sh patch.sh来自动替换:
sed -i '0,/^#include.*/s//#include "internal.h"\n&/' \
pidgin/win32/gtkdocklet-win32.c \
pidgin/win32/gtkwin32dep.c \
pidgin/win32/wspell.c \
pidgin/plugins/win32/winprefs/winprefs.c
一些包的名字有问题,应该是源代码不是最新的缘故:nss的那个包文件夹名字为nss-3.13.6-nspr-4.9.2以及pidgin-inst-deps-20120910
在win8下编译,会因为wstcpip和winsock的冲突,导致无法编译,需要调整include的顺序:将 #include "internal.h" 放在 #include <windows.h> 前面,在以下文件中
在这里下载并解压缩到win32-dev中
使用 make -f Makefile.mingw install 编译
在第2步中就会获取glib的依赖,所以这里不用再做什么.
在这里下载spider monkey的mingw32预编译好的包,解压缩到win32-dev/js-1.8.5-mingw32目录下.
需要使用在上面提供的依赖的压缩包文件,如果是随意复制其它来源的dll(如pthreadGC2.dll会导致这些dll依赖libgccsw***.dll 从而使得静态链接的libwebqq.dll失效,直接导致了pidgin退出的时候出现异常错误)
prepare directly
也可以直接下载整理好的傻瓜包中的pidgin-dependencies.7z和pidgin-lwqq-dependencies.7z直接解压缩到win32-dev中,pidgin源代码中需要修改的文件放在了pidgin-dependencies/pidgin目录下了。
build
打开一个MinGW Shell,进入lwqq_root目录,输入
git clone https://github.com/xiehuc/pidgin-lwqq.git
git submole init
git submole update
cd pidgin-lwqq
mkdir build;cd build
cmake .. -G "MSYS Makefiles" -DWIN32_LIBS_DIR=`lwqq_root/win32-dev`的绝对路径 -DPACKAGE=ZIP
make
最后,就可以在build/src目录下获得libwebqq.dll. PACKAGE选项可以自动打包成zip文件,使用make package之后可以在build目录下获得zip包
install
将制作的zip包解压缩到pidgin的根目录即可。执行pidgin就可以在协议中看到WebQQ协议了
Ⅳ 如何在windows xp系统下使用gtk 谁会就请给出详细步骤
遇到问题,相关软件的官网是第一选择,搜索引擎其次,图书馆往往最浪费时间。
http://www.gtk.org/download-windows.html
以上网页第一段的意思是:为了编译GTK+程序,需要安装GLib、cairo、Pango、ATK、gdk-pixbuf和GTK+这些开发包(就是GTK+ indivial packages标题下Dev列的内容,其中GTK+提供了两个版本,只需要一个就可以了);为了运行GTK+程序,需要安装GLib、cairo、Pango、ATK、gdk-pixbuf和GTK+的运行库(就是GTK+ indivial packages标题下Run-time列的内容),以及gettext-runtime、fontconfig、freetype、expat、libpng和zlib(就是Required third party dependencies标题下Run-time列的内容)。
如果要编程,What toolchain to use?标题下的内容最好也看一下。
写Windows下的GTK+程序还有个选择:http://ricardo.ecn.wfu.e/~cottrell/cross-gtk/。
总结一下:只是在Windows下运行GTK+程序,则安装GLib、cairo、Pango、ATK、gdk-pixbuf、GTK+、gettext-runtime、fontconfig、freetype、expat、libpng和zlib的运行库(就是Run-time列的内容)就行了(如果你很清楚这里某个组件是用不到的,不装也行)。
如果是在Windows下写GTK+程序,就把我前面提到的编译和运行需要的内容都装上(编程过程中需要调试吧!)。
想深入一点,http://www.gtk.org/documentation.html是要看一下的。想深深地陷入GTK+,那还是把Windows休了吧。