您的位置:首页 > 运维架构 > Linux

Linux(ubuntu)下编程方面-杂项

2009-11-15 15:17 393 查看
1. 编译源代码的时候出现错误:bash: ./configure: Permission denied

这个错误是和代码所在的硬盘格式(linux下即为挂载-mount)有关系。我今天有个代码下到桌面上,编译的时候就出现这个错误,后来复制到windo

w的NTFS下面就好了。貌似就这个源代码是这样的,其余的代码我也直接下载到桌面上,但是编译没问题的。刚开始还以为是这个代码本身的问题呢。有
点意思,本以为从windows下复制到linux上可能会出现这样的错误,谁知道也有在linux环境下linux硬盘格式不接受编译,windows
格式可以编译的事情。难道是这个代码本就应在windows下进行编译?

2. 设置环境变量

在windows 下,我的电脑-属性-高级-环境变量 就可以了。

linux下怎么搞呢?其实也很简单。一般情况下,用命令:export ENVIRONMENT_NAME=$ENVIRONMENT_NAME:YOUR_PATH就可以了。要查看,用命令:echo $ENVIRONMENT_NAME

但是这里的命令有些区别:

她分了三个层次,首先是在终端中使用,这个是临时的,当你的终端(shell)关闭时,该环境变量也失效了。其次是当前用户的,那就要到/home
/usr-name/.bashrc中去添加这一行命令。最高的层次就是面向所有用户的了,到/etc/profile文档里面去添加即可。

3. 安装GTK1.x

按理说,现在都在用GTK2.x了,但是没办法,有些源代码编译的时候还是只支持1.x版本。我在编译openev时候提示错误:checking for gtk-config... no

可以看到这里是在找gtk-config,而现在2.0版本都是用的pkg-config,所以从这里可以得知错误的原因在于安装的gtk版本不合适。

下载gtk1.2版本(从起官方网站http://www.gtk.org上面找),但是首先还要下载安装glib(从gtk的install说明文件得知,这个对应的glib和gtk位于同一个父目录下,在刚刚下载gtk的页面上面点击Parent Directory即可)。

这里需要注意:1)如果提示“X libraries or include files not found”,那么说明这里的x开发库没安装完整,我这里是少了个名为“libghc6-x11-dev”的东东。直接sudo apt-get install libghc6-x11-dev即可。

当然,要使得刚安装的x库能用,需要运行ldconfig,即:cd /sbin,然后./ldconfig

2) 为了使得刚刚安装的glib库能够使用,要么默认安装,即/usr/...之类的目录下,那就万事大吉,后面什么都不用管。因为如果别的程序要使用该安装好的库文件,会自动从/lib,/usr/lib等目录下去搜索。

但是那个不方便管理,所以我一般情况下都会指定安装目录:./configure--prefix=....

那么在这种情况下,就需要指定该库文件的目录了。根据编译时的错误提示:应该指定LD_LIBRARY_PATH环境变量或者在/etc/ld.so.conf中添加该库文件路径(注意这里是make install后的库文件路径而不是其父目录路径-整个的安装路径)。那么在环境变量的时候如果有多个值的时候,就需要用“:”隔开,格式如:export ENV_NAME=$ENV_NAME:path1:path2...,然后退出重启使之生效。

3)出现错误:”checking for GTK - version >= 0.99.7... no“即某个东西没有安装或者版本太低的错误,而自己明明已经安装的好好的就经常属于这种库文件目录没有指定好的缘故,所以赶快去看看环境变量(我更倾向于设置环境变量)设置好了没有。

4. GTK API的查询

一般情况下,安装完GTK+后会sudo apt-get install devhelp等进行下载API 文档,事实上,我发现这个devhelp不是固定不变的

而是根据前面安装的相关XX-doc文档的来显示的。也就是说,如果你安装了libgtkglext-doc,那么devhelp里面就会有相关的文档:

GtkGlExt Reference Manual文档,那么到目前为止,我安装的有如下几个:

sudo apt-get install libglib2.0-doc libgtk2.0-doc
libgtkglext1-doc glade-doc libcairo2-doc

5.S52编译运行所需要的环境

首先需要安装必要到编程工具。

然后,需要sudo apt-get install libglu1-mesa-dev ——openGL

libgtkglext1-dev libgtkglextmm-x11-1.2-dev ——gtkglext

liblcms1-dev ——lcms

在Linux下,需要安装GTK、proj4、GDAL、

如果中间遇到一些其他的“缺少。。。”提示,请sudo apt-cache search,因为每个人安装linux系统的环境可能会有少许

的差异。

6.GTK下box布局widget的几个参数设置

<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }使用box
,主要是这么两个函数:

gtk_hbox_new(gboolean
homogeneous, gint spacing);

gtk_box_pack_start(GtkBox
*box,GtkWidget *child,

gboolean expand,gboolean
fill,guint padding);

当然,和以上两个函数对应的还有..vbox_new
和..pack_end
,但是现在就横向的作说明。
对于第一个函数:
homogeneous

是指box
中放置的child,实际分配给它的child
size是否都是一样的大小;
spacing

是指初始状态下,children
之间的间隙大小;

对于第二个函数:
首先需要理解box
的大小:
box
的大小=box
的border
width
+children
之间的spacing(..box_new
中设置的那个数值)
+sum
of child size(requisition size)

这里的child
size=
可视长度(
Child Widget’s Size
Request

)+2*padding,
举个例子:如果child
是button
,可视长度即为显示其label
所需要的最短长度。
准确的说,初始状态下,box
大小=sum
of child size+2*box border width+(number-1)*spacing

而extra
space=allocation size-sum of child sizes,
这里的allocation
size
是指分配给children
的size,
即box
的size
减去border
width
和spacing
之后的size

注意:widget
的大小分配都是按照其children
来的:如button
大小(默认情况下)就是显示其label
所必须的大小,box
也一样。分配给box
的初始大小就是其所定义的
2*border
width+(number of child-1)*spacing+number of child*child size.

那么,什么时候会出现extra
space
呢?
首先,初始状态下,homogeneous
设为TRUE
。这个时候,必须的child
size
不一样(多数情况下),却强制要求最后的child
size
一样,也就是分配给它的比它所必须的size
大,extra
space
出现了。
总之,extra
space
是指分配的sum of
child sizes
大出其所必须的child
sizes

还有很典型的是当用户在显示为初始状态后,手动改变窗口(假定box
是放在window
中的,那么box
的大小跟随window
大小变化且充满window
。而在初始状态下,box
大小根据child
size
大小来定,window
size
根据box
大小来定,还记得前面说过的“widget
的大小分配都是按照其children
来的”吧)的大小,那么此时就会多出requisition
部分的extra
size
来。

下面来说说参数的设定:
前面两个很容易理解,就是用作容器的box
和放置于容器中的child

第三个和第四个参数都和extra
space
有关
如果选择expand
,即expand
选为TRUE
时,则说明将要启用extra
space
,反之则不启用extra
space(
注意:这里的“启用”是指child
的大小和extra
space
有关,extra
space
将分配给child)

fill
是用来说明所启用的extra
space
是如何分配的:如果fill
为TRUE,
则extra
space
将分配给child
使可视部分增大;否则,extra
space
将分配给child
的padding
部分(padding
不可见)。

<!--
@page { margin: 2cm }
P { margin-bottom: 0.21cm }
-->

padding
是指child
任意一端的多出可视部分的长度,虽然这多出的部分不可见,但是它是属于child
本身的一部分。

7.printf在终端显示出现问题:出现莫名其妙的东东

请注意:要在输出的字符后添加字符'/n'

8.GTK+下使用openGL渲染图形——启用gtkglext扩展

安装:可以直接在终端下:sudo apt-get install libgtkglext1-dev;或者下载源代码(http://projects.gnome.org/gtkglext/download.html)自己编译,目前的最高版本为1.2.0。

运行GTK+opengl程序,编译时可以使用以下类似命令:

gcc simple.c -o simple `pkg-config --cflags --libs gtk+-2.0 gtkglext-1.0`

也就是在编译GTK程序命令的后面加上gtkglext-1.0(如果是1.2版本,就改为该版本)。

请注意:gtkglext是GTK+支持opengl的扩展库,也就是连接GTK+和opengl的桥梁,类似于在x window下,glx连接x

lib和opengl一样。目前充当GTK+和opengl桥梁作用的貌似就是gtkglext库了,glut之类的似乎没法在GTK+下运行。

9. vim/Gvim的设置

1)安装完gVim后,在~/下建立一个.vimrc文件,在其中写入以下内容:

" Platform
function! MySys()
if has("win32")
return "windows"
else
return "linux"
endif
endfunction
function! SwitchToBuf(filename)
"let fullfn = substitute(a:filename, "^//~/", $HOME . "/", "")
" find in current tab
let bufwinnr = bufwinnr(a:filename)
if bufwinnr != -1
exec bufwinnr . "wincmd w"
return
else
" find in each tab
tabfirst
let tab = 1
while tab <= tabpagenr("$")
let bufwinnr = bufwinnr(a:filename)
if bufwinnr != -1
exec "normal " . tab . "gt"
exec bufwinnr . "wincmd w"
return
endif
tabnext
let tab = tab + 1
endwhile
" not exist, new tab
exec "tabnew " . a:filename
endif
endfunction
"Fast edit vimrc
if MySys() == 'linux'
"Fast reloading of the .vimrc
map <silent> <leader>ss :source ~/.vimrc<cr>
"Fast editing of .vimrc
map <silent> <leader>ee :call SwitchToBuf("~/.vimrc")<cr>
"When .vimrc is edited, reload it
autocmd! bufwritepost .vimrc source ~/.vimrc
elseif MySys() == 'windows'
" Set helplang
set helplang=cn
"Fast reloading of the _vimrc
map <silent> <leader>ss :source ~/_vimrc<cr>
"Fast editing of _vimrc
map <silent> <leader>ee :call SwitchToBuf("~/_vimrc")<cr>
"When _vimrc is edited, reload it
autocmd! bufwritepost _vimrc source ~/_vimrc
endif
" For windows version
if MySys() == 'windows'
source $VIMRUNTIME/mswin.vim
behave mswin
endif
""""""""语言""""""""""""""""
"LOCALE="zh_CN.UTF-8"
"LANG="zh_CN.UTF-8"
"""""""语法高亮"""""""""""


2)设置环境变量:

export LANG="zh_CN.UTF

3)安装cscope(apt-get install cscope即可)和ctags,下载taglist,将下载到内容解压到~/.vim中(如果目录下没有该文件,可以自己建立一个),即在/home/randyqiu/.vim下建立doc和plugin文件夹,其中有解压出的文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: