tinyxml编译
1. 如何在CentOS上安装并汉化Code:Blocks
安装步骤
一、安装wxWidgets
1.下载wxWidgets源码包,地址:http://www.wxwidgets.org/downloads/
2.解压。可以使用tar命令,CentOS里也可以直接用鼠标右键操作
3.进入解压后的目录,打开终端,依次输入以下命令
./configure (最好不要加上prefix参数,使用默认设置会比较有利于后面步骤的顺利推进)
make (编译。此过程相当漫长,可以打两盘斗地主再回来)
make install (安装。)
安装完成后,终端输出如下提示:
The installation of wxWidgets is finished. On certain
platforms (e.g. linux) you'll now have to run ldconfig
if you installed a shared library and also modify the
LD_LIBRARY_PATH (or equivalent) environment variable.
这是说需要设置环境变量LD_LIBRAY_PATH(环境变量的作用是告诉系统寻找wxWidgets开发库该去的路径。因为操作系统的逻辑是,如果在我认为该去的路径没找到的我要的东西的话,我就会认为那个东西木有安装),暂不关闭本大步中打开的终端。
二、设定环境变量LD_LIBRAY_PATH
参考链接:
ldconfig及 LD_LIBRARY_PATH http://www.linuxidc.com/Linux/2011-10/45744.htm
Linux环境变量修改和设置 http://www.linuxidc.com/Linux/2012-12/75495.htm
Linux export 命令 http://www.linuxidc.com/Linux/2012-10/72746.htm
依据上一大步最后得到的提示信息,综合参考资料,我们作出以下操作,
1.仍在第一大步打开的终端,不改变目录,输入以下命令:
ldconfig (这完全是根据第一步最后的提示信息来的)
export -p (查看系统当前环境变量的值,此步仅为了和设置后的效果作对比,可省略)
可以看到现在,LD_LIBRAY_PATH的值是空的(结果中没有此项的存在)。
2.继续输入命令:
./wx-config --libs
得到结果(安装目录不同结果会有小差异):
-L/root/Desktop/wxWidgets-2.8.12/lib
-pthread -Wl,-rpath,/root/Desktop/wxWidgets-2.8.12/lib
-lwx_gtk2_richtext-2.8 -lwx_gtk2_aui-2.8 -lwx_gtk2_xrc-2.8
-lwx_gtk2_qa-2.8 -lwx_gtk2_html-2.8 -lwx_gtk2_adv-2.8 -lwx_gtk2_core-2.8
-lwx_base_xml-2.8 -lwx_base_net-2.8 -lwx_base-2.8
3.在/etc目录下找到文件profile,打开它,在里面添加以下命令:
export LD_LIBRARY_PATH="…………"
引号里的内容为上一小步“./wx-config --libs”的执行结果。export命令用于编辑环境变量,如果你不知道该加在什么位置,请在文件中随意另找一条export命令,跟在他后面即可。保存profile文件。
4.还是在前面打开的终端,继续输入命令:
source /etc/profile (在不用重启系统的情况下使profile修改的内容生效)
export -p (查看系统当前环境变量的值)
这回可以看到,LD_LIBRAY_PATH的值被成功设定为第2小步里“./wx-config --libs”的执行结果。
三、安装codeblocks
1.下载codeblocks源码包,地址:http://www.codeblocks.org/downloads/
2.解压。
3.进入解压后的目录,打开新的终端,依次输入以下命令
./configure --prefix=/usr/local/codeblocks (prefix参数用以指定安装路径。如果跳过了第二大步,则在此会得到没有安装wxWidgets的提示)
make (编译。额,咱们继续斗地主……)
make install (安装。)
OK,至此,Code::Blocks安装圆满完成。在任意目录下打开终端,直接执行codeblocks命令即可运行Code::Blocks。
四、codeblocks汉化
1.下载codeblocks的汉化包,地址:
免费下载地址在 http://linux.linuxidc.com/
用户名与密码都是www.linuxidc.com
具体下载目录在 /2014年资料/2月/5日/Hadoop公平调度器指南 PDF
下载方法见 http://www.linuxidc.com/Linux/2013-07/87684.htm
2.在/usr/share/ 或者/usr/local/share/
目录下(看你在第三大步中是怎么指定的prefix参数)找到codeblocks目录(内含icons、images、lexers、scripts等
资源目录以及一些压缩包),并在该目录下建立一个子文件夹:locale(注意 locale
全为小写字母)。如果找不到,请看步骤3,否则直接看步骤4。
3.在桌面上打开终端,运行命令:locate codeblocks >codeblocks 。运行完毕后,在桌面生成了一个名为codeblocks的文件,打开该文件,从中找到codeblocks目录所在的路径。
4.将所下载的压缩包解压到第2步创建的locale目录下,则locale目录下应出现zh_CN子目录,内有一个名为codeblocks.mo的文件。
5.
启动Code::Blocks,点击主菜单的“Settings”,选择“Enviornment”。出现的对话框中,左边选中“View”,右边打勾
“Internationalization (needs restart)”,并在后面的复合框中选中“Chinese
(Simplified)”。确认退出本对话框。
6.重启Code::Blocks。再看到的应该是中文简体界面了。
主要纠结的问题
1.最早下了一套rpm包,然后在安装到第四个包,libtinyxml0,的时候出现了包依赖问题:
error: Failed dependencies:
libstdc++.so.6(GLIBCXX_3.4.9) is needed by libtinyxml0-2.6.1-9.1.2.i586
rpmlib(PayloadIsLzma) <= 4.4.6-1 is needed by libtinyxml0-2.6.1-9.1.2.i586
这个问题困扰了我很久,搜了很多文档来看都木有解决,最后就放弃了。欢迎知道怎么办的请给我留言,谢谢!
据资源的上传者说,在OpenSUSE Linux下测试通过。如果你也使用这个系统,可以去这个链接看看:http://www.linuxidc.com/Linux/2014-02/97367.htm
2.根据看到的资料,我在安装完wxWidgets之后直接安装codeblocks,结果终端报错,
configure: error:
wxWidgets must be installed on your system
but the wx-config script couldn't be found.
Please check that wx-config is in path, the directory
where wxWidgets libraries are installed (returned by
'wx-config --libs' command) is in LD_LIBRARY_PATH or
equivalent variable and wxWidgets version is 2.8.0 or above.
但是我明明已经安好了wxwidgets啊!找了好多资料,试了好多方法,都木有解决。后来仔细阅读了wxwidgets安装成功后的提示信息,拿来和codeblocks安装初始化的报错信息比对,才终于找到了症结所在:环境变量设置。
基本我看到的所有资料都没提这个问题,但他确实很重要。由此我得到的结论是,网上资料固然多,按部就班问题亦多。若要顺顺利利,还请多看系统提示。
顺手牵羊
1./etc/ld.so.conf
这个文档记录了编译时使用的动态链接库的路径。默认情况下,编译器只会使用/lib和/usr/lib
这两个目录下的库文档,如果想往上面两个目录以外加东西的时候,就需要在etc/ld.so.conf.d目录下添加一个conf文件,把新路径加进去,
然后再调用ldconfig。
又有一些文献说,如果想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf文件,不然会系统找不到新库。看完后我茫然了,后来我打开了ld.so.conf文件,里面内容如下:
include ld.so.conf.d/*.conf
看完,我突然就懂了。
2.wxWidgets与wxGTK
wxwidgets 是一个c++编写的用来提供gui开发的框架。它包含一个可以支持现今几乎所有操作系统的GUI库。而适用于Linux系统的就是wxGTK,Windows平台下的则叫做wxMSW。
3.使用tar命令时,压缩包不能有“(”等非法符号
2. linux tinyxml2怎么编译
1.首先,要到官网上去把tinyxml库下载下来,网址为:点击打开链接:http://sourceforge.net/projects/tinyxml/
2.把下载的tinyxml库解压缩,我这里是解压缩到/opt 目录下
3.进入到解压缩目录下,我们会发现Tinyxml在Windows 下是使用微软的VS 来生成的库,因为其中有tinyxml.sln,tinyxml_lib.vcxproj,tinyxmlSTL.vcxproj等文件,当然,Tinyxml是开源的,所以它也有一个Makefile,用来生成Linux下的Tinyxml库。整个Tinyxml源码项目其实是由2个头文件和一个4个C++源文件(.cpp)组成:tinystr.h,tinyxml.h,tinystr.cpp,tinyxml.cpp,tinyxmlerror.cpp,tinyxmlparser.cpp。其中还有一个xmltest.cpp文件,只是一个测试代码,有兴趣的话,大家可以打开研究它。好了,现在介绍怎么修改它的Makefile:
(1)使用vim或者其他的编辑器打开Makefile文件
(2)将其中的注释为Targets of the build的下一行OUTPUT := xmltest一行修改为:OUTPUT := libtinyxml.a
(3)将其中的注释为Source files 的下一行SRCS:=tinyxml.cpp tinyxml-parser.cpp xmltest.cpp tinyxmlerror.cpp tinystr.cpp中的xmltest.cpp删除,因为它只是一个测试源文件,不需要编译。
(4)将其中的Output的下一行的${LD} -o $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}修改为:${AR} $@ ${LDFLAGS} ${OBJS} ${LIBS} ${EXTRA_LIBS}。大致改成这样
- ${OUTPUT}:${OBJS}
- ${AR}$@${LDFLAGS}${OBJS}${LIBS}${EXTRA_LIBS}
- #${LD}-o$@${LDFLAGS}${OBJS}${LIBS}${EXTRA_LIBS}
(5)将Makefile的倒数第二行 xmltest.o:tinyxml.h tinystr.h,注释掉,因为不需要将演示程序添加到静态库中。然后保存退出。
(6)在终端下进入Makefile所在目录,执行make命令编译,即可在Makefile所在目录下生成libtinyxml.a文件。
4.接下来就可以使用这个静态库了:$ g++ -o xmltest xmltest.cpp libtinyxml.a 注意:将使用的静态库放在源文件后面即可,如果静态库文件不在当前目录,应该使用它的绝对路径或者用g++的参数-L来指定路径,因为编译器默认在当前目录下先查找指定的库文件。
修改后的Makefile (v 1.0.1) 记录如下:
[plain] view plain print?
#****************************************************************************
#
#MakefileforTinyXmltest.
#LeeThomason
#www.grinninglizard.com
#
#ThisisaGNUmake(gmake)makefile
#****************************************************************************
#,orNOotherwise
DEBUG:=NO
#,orNOotherwise
PROFILE:=NO
#TINYXML_USE_.NO,thenSTL
#willnotbeused.YESwillincludetheSTLfiles.
TINYXML_USE_STL:=NO
#****************************************************************************
CC:=gcc
CXX:=g++
LD:=g++
AR:=arrc
RANLIB:=ranlib
DEBUG_CFLAGS:=-Wall-Wno-format-g-DDEBUG
RELEASE_CFLAGS:=-Wall-Wno-unknown-pragmas-Wno-format-O3
LIBS:=
DEBUG_CXXFLAGS:=${DEBUG_CFLAGS}
RELEASE_CXXFLAGS:=${RELEASE_CFLAGS}
DEBUG_LDFLAGS:=-g
RELEASE_LDFLAGS:=
ifeq(YES,${DEBUG})
CFLAGS:=${DEBUG_CFLAGS}
CXXFLAGS:=${DEBUG_CXXFLAGS}
LDFLAGS:=${DEBUG_LDFLAGS}
else
CFLAGS:=${RELEASE_CFLAGS}
CXXFLAGS:=${RELEASE_CXXFLAGS}
LDFLAGS:=${RELEASE_LDFLAGS}
endif
ifeq(YES,${PROFILE})
CFLAGS:=${CFLAGS}-pg-O3
CXXFLAGS:=${CXXFLAGS}-pg-O3
LDFLAGS:=${LDFLAGS}-pg
endif
#****************************************************************************
#Preprocessordirectives
#****************************************************************************
ifeq(YES,${TINYXML_USE_STL})
DEFS:=-DTIXML_USE_STL
else
DEFS:=
endif
#****************************************************************************
#Includepaths
#****************************************************************************
#INCS:=-I/usr/include/g++-2-I/usr/local/include
INCS:=
#****************************************************************************
#
#****************************************************************************
CFLAGS:=${CFLAGS}${DEFS}
CXXFLAGS:=${CXXFLAGS}${DEFS}
#****************************************************************************
#Targetsofthebuild
#****************************************************************************
OUTPUT:=libtinyxml.a
all:${OUTPUT}
#****************************************************************************
#Sourcefiles
#****************************************************************************
SRCS:=tinyxml.cpptinyxmlparser.cpptinyxmlerror.cpptinystr.cpp
#Addonthesourcesforlibraries
SRCS:=${SRCS}
OBJS:=$(addsuffix.o,$(basename${SRCS}))
#****************************************************************************
#Output
#****************************************************************************
${OUTPUT}:${OBJS}
${AR}$@${LDFLAGS}${OBJS}${LIBS}${EXTRA_LIBS}
#${LD}-o$@${LDFLAGS}${OBJS}${LIBS}${EXTRA_LIBS}
#****************************************************************************
#commonrules
#****************************************************************************
#
%.o:%.cpp
${CXX}-c${CXXFLAGS}${INCS}$<-o$@
%.o:%.c
${CC}-c${CFLAGS}${INCS}$<-o$@
dist:
bashmakedistlinux
clean:
-rm-fcore${OBJS}${OUTPUT}
depend:
#makedepend${INCS}${SRCS}
tinyxml.o:tinyxml.htinystr.h
tinyxmlparser.o:tinyxml.htinystr.h
tinyxmlerror.o:tinyxml.htinystr.h
3. 64位linux下面的GCC如何编译出一个32位可执行程序
在64位Linux环境下,使用GCC编译32位可执行程序并不困难,但需要确保你的编译环境具备相应支持。默认安装的GCC编译器可能无法直接编译64位程序,因为缺少64位机器指令相关的文件,导致在编译过程中出现类似错误:
"In file included from /usr/include/features.h:378, from /usr/include/assert.h:37, from ../../../include/tinyxml/tinystr.h:42, from ../../../src/tinyxml/tinystr.cpp:32: /usr/include/gnu/stubs.h:9:27: error: gnu/stubs-64.h: 没有那个文件或目录"
解决方法是安装gcc所有支持文件,通过命令“sudo apt-get install gcc-multilib”进行安装。安装过程中,系统会提示需要安装一系列额外的软件包,例如:
cpp-4.4, g++-4.4, gcc-4.4, gcc-4.4-base, gcc-4.4-multilib, lib64gcc1, lib64gomp1, libc6-amd64, libc6-dev-amd64, libgcc1, libgomp1, libstdc++6, libstdc++6-4.4-dev
安装这些软件包后,你可以通过在编译命令中加上-m32参数来指定编译32位程序。例如,使用“gcc -m32 -o myprogram myprogram.c”来编译32位程序。
需要注意的是,编译32位程序需要确保目标系统支持32位架构。如果你的目标系统是32位的Windows XP,你可以使用上述方法编译出能在32位系统上运行的程序;同样地,对于64位的Windows Vista、32位的Ubuntu和64位的Ubuntu,也可以编译相应的32位或64位程序。
然而,如果你在老师的题目中遇到困难,可能是因为具体的需求或条件未详细说明。建议与老师进一步沟通,了解具体的题目要求,以确保正确理解和执行任务。
4. c++ signal/slots 开源库有哪些
C++在“商业应用”方面,曾经是天下第一的开发语言,但这一桂冠已经被java抢走多年。因为当今商业应用程序类型,已经从桌面应用迅速转移成Web应用。当Java横行天下之后,MS又突然发力,搞出C#语言,有大片的曾经的C++程序员,以为C++要就此沉沦,未料,这三年来,C++的生命力突然被严重地增强了。主力原因就是开源的软件、基础软件(比如并发原生支持,比如Android必定要推出原生的SDK)、各种跨平台应用的出现。
开源C++库必须具有以下特点:必须是成熟的产品、跨平台的产品、相对通用的库。
一、通用标准类
STL:C++标准模板库,呵呵,它也是开源的嘛。
boost:C++准标准库,它是强大地,江湖称之“千锤百炼”。
deelx (轻量级的正则表达式解析类库,国产),boost里有强大的正则表达式解析库,但如果你只想要一个表达式解析,不想要拖上庞大的boost库时……支持一下国货。
iconv /iconvpp : (C形式的编码转换函数库,
二、XML解析库
C++的XML相关库不少,但是大部分其实都是C库,使用起来自然不那么轻便。其中基于DOM的有TinyXml,基于SAX的当然是Xerces。前者小巧快捷,便于使用,适合做数据交换。后者则是全功能的XML解析器。
xerces-c :最强大的XML解析库了,不是仅仅在开源库里,你尽管把商业的算在内。当然,它的变体,被IBM拿去卖钱的那个版本,多了数百兆的东东来支持各国编码转换,是更强大,但我觉得有小小的,开源的iconv在前不就够了?
xml相应的c开源库有expat,基于SAX,应用广泛。
xsd (XML 与 C++数据结构的绑定工具)。(商业使用要钱)
三、数据库
mysql / mysql++: 不用介绍吧。现在Oracle手里,但我很放心。
四、多媒体类
SDL (Simple DirectMedia Layer/多媒体直接访问层,用于游戏编程)。
相应的c开源库有ffmpeg、mpeg4、aac、avc、libmad、mpeg1、flac、ac3、ac3、matroska着名的多媒体播放器 TCPMP 天下闻名的跨平台、嵌入式手持设备视频播放器,
五、网络开发类
gSOAP SOAP协议的C++支持库及代码生成工具。
ACE 大型网络编程的首选库。
除了ACE之外,还有很多系统和网络编程方面的程序库。比如在线程库方面,还有ZThread、boost::thread,如果放大到C/C++领域,还有APR,还有CII。在文件和目录操作方面,boost也有相应的组件,而在网络编程方面有socket++,还有boost::asio,未来的 C++0X中几乎肯定有一个网络编程和一个线程库。然而目前看来,ACE仍然是进行系统和高性能网络编程的首选,其地位在一段时间内不会被撼动。它不但是一个实用的程序库、框架集,还是一个典范的设计模式应用范例,非常值得学习。
六、GUI库
BCG Windows平台下界面设计的第三方库,可以让你的界面更美好,更具时 代感。
wxWidgets :使用wxWidgets ,开发者可以基于同一套代码,为Win32, Mac OS X, GTK+, X11, Motif, WinCE等平台开发应用程序。wxWidgets库可以被C++, Python, Perl, and C#/.NET等开发语言使用。跟其它有些同样支持跨平台GUI开发工具不同,基于wxWidgets的应用,拥有真实本地化的视觉及使用效果——因为,wxWidgets使用(各)平台原生的控件,而不是简单通过贴图去模拟。wxWidgets是使用广泛的,自由的,开源的,成熟的。
QT-------------界面(GUI)开发,支持C++/Java/Python/...多种语言。跨平台。最主要的好处是,API非常优美!Qt本身也不仅仅只是做GUI编程,实际它基本上可以做OS-API可以做的任何事情。象网络/数据库/OpenGL/...都提供完美的支持。
传统上Qt被认为是可移植的GUI库,但实际上Qt现在已经是一个比较完整的可移植应用程序框架了,其中包含了大量的工具,比如正则表达式、Web和 Socket类、2D和3D图形、XML解析、SQL类等,甚至还包括了一个完整的容器类库,不过其王牌还是GUI。在目前的跨平台GUI框架中,Qt成熟度最高,已经被一些大公司应用在关键产品中。由于Trolltech对Qt采用的al license模式,该产品既可以从开源社区获得支持,又能够赚取足够的商业利润,因此其前景也令人比较有信心。
Qt的主要技术特色是其元对象模型。Qt实际上使用的并不是标准的C++,而是标准C++的一个扩展。它通过元对象模型扩展,实现了着名的signal/slot机制,而这一机制也成为Qt的最大特色和优势。
与Qt类似的可移植GUI框架还有wxWidget、FOX等
六. 计算机视觉
OpenCV,因特尔自主的开源库。支持C/C++/Python接口。这个感兴趣的朋友可以玩一下。如果结合OpenCV,你可以做一些外行人觉得很酷的程序。比如说用它的人脸识别函数,来对你的摄像头进行处理,判断人的动作等
七. 图形图像处理
GDAL,处理大图像。要是GIS专业的人肯定会语言到非常大的tif影像,动则几个GB的航空影像。GDAL对大图像的读写支持是非常棒的(像多波段的图像都可以搞定)。支持C++/Java/Python...
国外开源的GIS软件QGIS就是用了gdal
c的图形图像库较多,libjpeg、libpng、zlib、tiff、JBIG、最着名的开源形图像处理软件Cximage
八、内存管理:boost::smart_ptr,Hans-Boehm GC
C/C++的内存管理是一个永恒的话题。一般来说,C++的开发者倾向于自己管理内存。然而,出乎很多C++开发者意料的是,近期C++的一些领袖人物已经公开宣称,如果不配备自动内存管理机制,用C++编写安全可靠的大型程序是非常困难的。而Bjarne Stroustrup也曾对中国开发者建议,如果没有特别的理由,应该在大型项目中使用自动内存管理工具。因此,今天的C++开发者应当积极地学习和应用自动内存管理设施。
说到自动内存管理,比较轻量级的做法是boost::smart_ptr,而激进的做法是引入完整的GC机制。目前开源而又比较可靠的GC中,Hans- Boehm GC无疑是最受信赖的。作为一个保守的GC,Hans-Boehm GC在性能和功能方面都算是卓越。特别是,使用这个GC,你仍然可以delete、free来自己管理内存,对于我们编程习惯的冲击比较小。
九、密码及安全:OpenSSL
安全是今天进行C/C++编程无法回避和必须重视的问题。然而编写安全的应用程序,特别是跟网络相关的C/C++应用程序,是一件十分困难的事情。可以说,整个业界目前在这个进程上仍然处于“初级阶段”。特别是涉及到大量的安全、密码学相关的算法、规范,如果让开发者自己摸索,其工作量和难度达到了不现实的程度。因此必须借助可靠的相关程序库才有可能提高程序的安全性。在这方面,OpenSSL是目前最好的选择,其内容之全面可靠,已经成为业界标杆。然而,由于安全编程固有的复杂性,即使使用penSSL,开发工作仍然是非常繁琐的。因此我们也希望能够尽快看到更简单、更易用的C/C++安全程序库。
十、矩阵计算:MTL
自1995年以来,C++在科学计算领域当中取得了巨大的突破。这主要归功于template技术的高级应用,使得C++在科学计算的性能方面取得了巨大的进步,一大批优秀的C++科学计算库涌现出来。比如Blitz++、POOMA、MTL、Boost::uBLAS。而这其中,MTL就功能丰富程度、性能、开发支持和成熟程度来讲,是比较突出的一个,因此可以优先考虑。值得一提的是,2002年,MTL与后来被Intel收购的KAI C++配合,曾经在性能评测中击败了FORTRAN。
十一、分布式对象中间件:ICE
ICE是分布式对象中间件领域里的后起之秀,可以大致地将其视为“改进版”的CORBA。目前应用在一些大型项目当中,其中包括波音公司主持的下一代陆军作战系统。
ICE的一个特别价值是其代码的范例意义。由于ICE的出现较晚,开发者比较系统地应用了新的C++编程风格,所以成为了研读C++代码的良好目标。
十二、正则表达式:boost::regex
正则表达式是编程工作中最强有力的工具之一。C++的正则表达式支持一直以来是一个软肋。大约在2001年左右,boost中出现了regex库,初步解决了这个问题。但是最初的regex无论在效率上还是可靠性方面都有一些问题,后来经过一次大规模的翻修之后,达到了比较完善的程度。
其他可以选择的替代品还有C语言的pcre库,Qt中的QRegExp类等。
十三、配置管理:Lua
随着软件系统越来越复杂,对软件的可配置型提出了越来越高的要求。传统上只要通过命令行参数来配置的系统,现在可能需要越来越多的方式和机制。目前越来越受欢迎、并且得到越来越多证实的做法,是将Lua嵌入到C/C++程序中,而用Lua程序作为配置脚本。这种做法的优势是,Lua语言强大灵活,可以适应复杂的配置要求。同时,Lua便于嵌入C/C++程序,而且编译执行速度非常快,可以说是目前解决C/C++程序配置管理问题的一个出色方案。