libxml2编译
㈠ 怎样编译和配置GStreamer
GStreamer无疑是一个美观的设计,但初学者往往觉得结构复杂,难以掌握。编译起来也很麻烦:) 本文列出了编译和配置GStreamer的主要步骤,给需要的人提供一个参考。 像其它的linux开源项目一样,GStreamer也是采用包括autoconf,automake在内的GNU build system来编译的。而且,GStreamer在编译和安装时还要依赖于其它的库,这些库至少包括:pkg-configGLiblibxml2 liboil 这些库都使用pkg-config来提供include路径和library路径等编译信息,而不是像很多开源项目一样在执行configure脚本的时候用CPPFLAGS/CFLAGS环境变量来指定。 这些库很容易通过google找到,一般以“*.tar.gz”或“*.tar.bz2”压缩文件的形式存在。使用tar命令解压:tar xzf *.tar.gz或tar xjf *.tar.bz2 解压后一般会生成一个源文件目录,先面的命令都要进入到各个库的源文件目录内执行。 具体编译和安装步骤如下: (1)确定各个库的安装路径。为描述方便,假设如下的安装路径:pkg-config: /usr/local/install-pkg-config/Glib: /usr/local/install-glib/libxml2: /usr/local/install-libxml2/liboil: /usr/local/install-liboil/GStreamer Core: /usr/local/install-gstcore/GStreamer Base Plugins: /usr/local/install-plugins-base/ (2)设置环境变量。下面的命令按bshell/bash的语法,cshell中应该用setenv。 export PATH=/usr/local/install-pkg-config/bin:$PATH export PKG_CONFIG_PATH="/usr/local/install-glib/lib/pkgconfig:/usr/local/install-libxml2/lib/pkgconfig:/usr/local/install-liboil/lib/pkgconfig:/usr/local/install-gstcore/lib/pkgconfig:/usr/local/install-plugins-base/lib/pkgconfig" 第一个命令是将pkg-config这个工具加入到PATH变量中,这样在执行configure脚本时就能够调到刚刚安装好的pkg-config。 第二个命令是设置pkg-config的搜索路径,在执行configure脚本时会调用pkg-config得到所依赖的头文件和库。 (3)编译和安装pkg-config。 ./configure --prefix=/usr/local/install-pkg-configmakemake install 执行configure脚本时用--prefix指定安装路径 (4)编译和安装GLib。 ./configure --prefix=/usr/local/install-glibmakerm -rf /usr/local/install-glib/include/glib.h /usr/local/install-glib/include/gmole.h make install (5)编译和安装libxml2。 ./configure --prefix=/usr/local/install-libxml2makemake install (6)编译和安装liboil。 ./configure --prefix/usr/local/install-liboilmakemake install (7)编译和安装GStreamer Core。 ./configure --prefix=/usr/local/install-gstcoremakemake check (optional) make install (8)编译和安装GStreamer Base Plugins。 ./configure --prefix=/usr/local/install-plugins-basemakemake check (optional) make install (9)编译和安装GStreamer的其它plugins,包括gst-plugins-good,gst-plugins-bad等。可选。与编译安装gst-plugins-base类似。 (10)设置运行环境。要运行GStreamer,需要设置GST_PLUGIN_PATH环境变量,指明GStreamer Core和Plugins的库路径。 export GST_PLUGIN_PATH="=/usr/local/gst/install-gstcore/lib:=/usr/local/install-plugins-base/lib" 如果还安装了其它plugins,也要加到GST_PLUGIN_PATH路径里。 另外,如果已有的tool chain版本不够,还需要更新tool chain。常需要做的是安装新版本的autoconf和automake。
㈡ ubuntu编译libxml2出现不是nanohttp.c的异常求指点
`ubuntu` 编译 `libxml2` 时遇到错误,指示不是 `nanohttp.c` 的异常,寻求指导。
在尝试编译 `libxml2` 时,发现按照他人建议修改 `nanohttp.c` 中的 `open` 代码后,执行 `make all-recursively`,但结果未见预期。查看错误输出,发现多个 `make` 命令的运行均以 “没什么可以做的为 `all`” 结束,表明编译过程并未实际进行到关键步骤,且此问题与 `nanohttp.c` 的修改似乎无关。
分析输出,可以推断问题可能不在于 `nanohttp.c` 的修改,而是编译过程中遇到的其他问题。解决步骤如下:
1. **检查编译环境**:确认编译环境(`Ubuntu`、`gcc` 版本)与 `libxml2` 源码是否兼容,确保所有必要的编译器、库和工具已正确安装。
2. **清理并重新配置**:尝试清理源码目录,使用 `./configure --help` 查看配置选项,确保所有默认设置正确无误。可能需要指定正确的编译选项,如 `--disable-debug` 或 `--with-openssl` 等。
3. **详细错误日志**:在编译过程中,增加错误日志级别,以便更详细地了解编译失败的具体原因。通常在 `configure` 或 `make` 命令中添加 `-v` 参数来获取详细输出。
4. **检查依赖库**:确认所有依赖库(如 `openssl`、`zlib` 等)正确安装且版本适配。尝试直接编译依赖库,确保它们能正常构建。
5. **尝试使用预编译版本**:如果直接编译出现问题,可以考虑使用已编译的预构建库版本,这有时能避免因配置或依赖问题导致的编译失败。
6. **查阅官方文档**:查阅 `libxml2` 的官方文档或社区论坛,寻找类似问题的解决方案,或询问是否有更新的指导文档或最佳实践。
7. **寻求社区帮助**:如果问题仍未解决,可以尝试在开源社区(如GitHub、Stack Overflow)中提问,提供详细的问题描述和当前的编译日志,以便获得更具体的帮助。
通过上述步骤,通常可以定位并解决在编译 `libxml2` 过程中遇到的问题。
㈢ linux 怎样搭建qtwebkit使用的gstreamer
1. 编译libxml2
下载libxml2-sources-2.7.6.tar.gz
解包后在当前目录下编写如下编译脚本:(当然,不用脚本也行,你可以直接执行)】
CC=arm-none-linux-gnueabi-gcc./configure--build=i686-linux--host=arm-none-linux--prefix=/home/work/dist--without-python
make&&makeinstall
2. 编译zlib, 这个太common,我不啰嗦了, glib-2.0要依赖的。
3. 编译glib-2.0
下载glib-2.24.2.tar.bz2, 解包, 这个版本的依赖库很少, 竟然只需要zlib。
老版本需要的libconv, gettext等均不需要了。
同样, 编写编译脚本:
CC=arm-none-linux-gnueabi-gcc./configure--build=i686-linux--host=arm-none-linux
--prefix=/home/work/dist
CFLAGS="-I/home/work/dist/include-L/home/work/dist/lib"
glib_cv_stack_grows=noglib_cv_uscore=noac_cv_func_posix_getpwuid_r=yes
ac_cv_func_posix_getgrgid_r=yesac_cv_lib_rt_clock_gettime=noglib_cv_monotonic_clock=yes
make&&makeinstall
4. 编译gstreamer
下载gstreamer-0.10.35.tar.gz, 这个是0.10版本里面最新的了。
编译脚本:
CC=arm-none-linux-gnueabi-gccPKG_CONFIG_PATH=/home/work/dist/lib/pkgconfig./configure--build=i686-linux--host=arm-none-linux
--prefix=/home/work/distCFLAGS=-I/home/work/dist/include--disable-registry--disable-loadsave--disable-gtk-doc
ac_cv_func_register_printf_function=no--disable-tests--disable-valgrind--disable-debug--disable-gst-debug
make&&makeinstall
5. 编译gst plugins base
下载gst-plugins-base-0.10.35.tar.gz。
编译脚本:
CC=arm-none-linux-gnueabi-gccPKG_CONFIG_PATH=/home/work/dist/lib/pkgconfig./configure--build=i686-linux--host=arm-none-linux
--prefix=/home/work/distCFLAGS=-I/home/work/dist/include--disable-valgrind--disable-x--disable-gnome_vfs--disable-alsa--disable-ogg--disable-pango--disable-theora--disable-vorbis--disable-examples
make&&makeinstall
接下来开始编译Qt
Qt的配置文件很复杂, 我就不写出来了, 就是要注意这三点:
1. 在Qt 的configure 时加上-force-pkg-config, 否则会在WebCore的feature.pri中检查时报"Disabling video e the lack of GLib/Gio/GStreamer.",
也就是说会不支持video.
具体可以看这个pri片段:
!contains(QT_CONFIG,no-pkg-config):system(pkg-config--existsglib-2.0gio-2.0gstreamer-0.10):{
DEFINES-=ENABLE_VIDEO=0
DEFINES+=ENABLE_VIDEO=1
DEFINES+=WTF_USE_GSTREAMER=1
DEFINES-=WTF_USE_GSTREAMER=0
}else{
message("DisablingvideoethelackofGLib/Gio/GStreamer.")
DEFINES-=ENABLE_VIDEO=1
DEFINES+=ENABLE_VIDEO=0
}
如果不指定-force-pkg-config, 就会被当作no-pkg-config.
2. 为configure指定:PKG_CONFIG_PATH=/home/work/dist/lib/pkgconfig, 否则也会diabling video
3. 为了让webkit库能找到gstreamer等库, 还需要在webkit.pro中加上
㈣ cocos2d-x 3.8 编译 android 问题,版主能帮忙解决下吗
一 无法替换cocos2d-x本身自带的libxml2
为什么需要自己编译libxml2:
由于我以前解析xml使用的是Tree的方式,在Win32以及GMO上能够正常运行,但是在ndk下编译的时候遇到问题了,原来cocos2d-x使用的libxml2把Tree的解析方式关闭了。于是乎摆在我面前的是两条路,第一条是重新编译一版libxml2,打开Tree的解析方式;第二条是修改以前的代码,采用SAX的解析方式。由于修改代码的工作量比较大,所以决定先采用第一个方案。(PS:推荐大家在以后的程序中解析xml使用SAX的方式,省很多内存)
编译时遇到的问题:
先将libxml2源代码(从Android 2.2的源代码中拷贝出来的,稍作修改)拷贝到cocos2d-x根目录,然后修改yourgame/android/厅猜闭jni/Android.mk, 修改如下
subdirs := $(addprefix $(LOCAL_PATH)/../../../,$(addsuffix /Android.mk, \
libxml2 \ # this is the new add content
cocos2dx \
CocosDenshion/android \
))
subdirs := $(addprefix $(LOCAL_PATH)/../../../,$(addsuffix /Android.mk, \
libxml2 \
cocos2dx \
CocosDenshion/android \ ))
然后将cocos2dx\platform\third_party\android\libraries\libxml2.a删除,再修改yourgame和cocos2d-x使用的新的libxml2的头文件目录,最后编译。然后果断的悲剧了,libxml2的代码不会被编译,然后在链接cocos2d-x so的时候会提示link error (libxml2的接口找不到实现)。
解决办法:
修改cocos2d-x的Makefile文件,修改如下:
LOCAL_LDLIBS := -L$(call host-path, $(LOCAL_PATH)/platform/third_party/android/libraries) \
-lGLESv1_CM -llog -lz \
-lpng \
-ljpeg \
# -lxml2 #delete the old style of link libxml2
LOCAL_STATIC_LIBRARIES := libxml2 # add to enable auto build of libxml2
yourgame 的makefile 的修改参考cocos2d-x。 哈哈,终于能正常编译了。
二 编译命令始终是compile++ thumb 或者 compilethumb
为什么不要使用thumb:
thumb指令集是为了满足一些低端的设备而加上的,使用的是16位的指令集,能压缩扮裂代码密度,但是指令比普通的32位arm指令弱很多,所以建议关闭掉。
解决办法:
在每个Android.mk 中每个Mole加上LOCAL_ARM_MODE := arm ,这样就能看到compile++ arm 和compile arm 了。
三 无法载入资源
问题描述:
在Android 程序编译完打包之后,安装上设备,提示"Get data from file **** failed", 但是发现文件路径是对的,只是中间有"."或者".."。
问题产生的原因:
在请教高人之后知道android程序中使用的资源是打包在压缩文件里面的,程序中只能通兆团过在压缩包的全路径名去获取文件,并且不能有相对路径(如"." , "..")。而且,不能通过fopen去打开,因为文件目录根本就没有这个文件。
解决办法:
1. 将plist文件和png,动画配置xml和png放在相同的目录,plist和xml中包含的文件名和plist以及xml在相同的目录下。
2. 在解析xml的时候不能使用xmlReadFile,而使用如下方式:
const char* xmlConfFullPath = CCFileUtils::fullPathFromRelativePath(yourfilename);
CCFileData data(xmlConfFullPath, "rt");
unsigned long size = data.getSize();
char *pBuffer = (char*) data.getBuffer();
doc = xmlReadMemory(pBuffer, size, NULL, "UTF-8", XML_PARSE_RECOVER);
四 dynamic_cast不能使用
问题描述:
dynamic_cast返回NULL,但是在Win32上是能正常工作的。
原因:
不详,反正搞不定,试过以下各种办法,均以失败告终:
1. 修改Application.mk,添加如下:
APP_STL := gnustl_static
APP_CPPFLAGS += -frtti
2. 修改编译器,使用gcc编译C+代码,且在链接时将-lsupc+ 换成-lstdc++
最后只能放大招:
将dynamic_cast 改为static_cast, 哎,先将就着用吧。
㈤ 编译可以通过,但是下载到开发板之后运行,提示找不到第三方库文件(libxml2.so.2),求解,急急急!!!
去找到编译器下面的这个库然后放到开发板的lib目录下面