gcc的使用和编译时的符号确定

一般来说,我们编译c语言程序要经过编译(预处理)、和链接两步。当然教材上讲的时候还有预处理。 预处理

1
gcc -E code.c -o code.e.c

预处理主要处理文件包含和宏定义等等。 编译

1
gcc -c code.c -o code.o

编译主要把c语句翻译成二进制代码(一般此步骤包括了预处理)。 但是有一些函数的实现没有在预处理过的c语言文件中,类似的还有extern声明的变量,所以现在编译的文件还没有办法执行。这些无法决定位置的函数和变量,在.o文件中统称为未定义的符号。 链接

1
gcc code.o -o code

在这一步我们要把所有.o文件中的未定义符号给确定下来,确定的来源有两种,查看其他.o文件的导出表中查找,从其他.so(dll)文件的导出表中查找。 gcc还有一个重要的参数是-g,表示编译的时候保留调试信息(包括c语句和汇编语句的对应关系,变量的分配) gcc的-o参数指定输出文件的名字。 让我们通过一个例子来了解这个流程

test.c
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>

extern int a;

extern void test();

int main()
{
test();
return 0;
}

先预处理它:

1
gcc -E test.c -o test.e.c

fedora 18 安装配置


安装fastestmirror:

个人不推荐更改repo文件,因为有单点依赖

yum install yum-plugin-fastestmirror

安装rpmfusion源:

RPM Fusion is a merger of Dribble, Freshrpms, and Livna.

yum localinstall –nogpgcheck http://mirrors.163.com/rpmfusion/free/fedora/rpmfusion-free-release-stable.noarch.rpm http://mirrors.163.com/rpmfusion/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm

字体:

yum install wqy-bitmap-fonts wqy-zenhei-fonts wqy-unibit-fonts wqy-microhei-fonts
yum install cjkuni-uming-fonts cjkuni-ukai-fonts

gedit乱码:


Linux下HaoZip创建的分卷文件的解压缩

近来看mysql视频,下载下来是“X.haozip01.zip”这样的文件,无法解压。 经过数次探索后,发现直接把文件拼装在一起再用unzip解压即可。 如下:

cat X.haozip01.zip X.haozip02.zip > X.zip
unzip X.zip


用reveal.js+markdown制作树型结构的slides

reveal.js 可以让你制作出基于网页的slides,轻量级,跨平台,非私有格式。 说来惭愧,我做的大多slides都是想表达这样的结构: image1 于是,就做出了这样的slides: image2 我们姑且称这样的slides为“树型结构slides”。我们要用 reveal.js来制作这样的 slides 。 fork项目:

git clone git://github.com/hakimel/reveal.js.git

然后修改index.html文件,把class为slides的div元素换为如下div元素(覆盖掉原来的div元素及其子孙元素)

data-separator=”^\n\n\n”表示用三个连续的换行作为横向分隔符(即顶层slide之间的分隔),data-vertical=”^\n\n”表示用两个个连续的换行作为纵向分隔符(即第二层slide之间的分隔)。 举例如下:

使用方法:首先展示开始页,按右或者回车显示下一页,按左显示上一页,按上下显示相应页面子页面。Esc显示概览。 如图: image3 不足:

需要slides作者有html/css基础。

加载时需要下载网页字体(这个可以先用离线模式解决,日后联系开发者解决)

只适用于“扁平”状的slides,如果层数太多,展示效果不好。


建立xdebug+eclipse的调试环境

几周了,终于让 eclipse 能够调试php代码了,期间找了许多资料,但是总不能如愿,于是记录如下。

安装xdebug

fedora 下直接安装 php-pecl-xdebug 包就算是配置好了 php 的 xdebug 扩展。

记得systemctl reload httpd.service 访问 phpinfo 页面时应该有 xdebug 的相关信息:

Screenshot from 2013-04-03 16:01:51

然后打开 display_errors ,即 php.ini 里面有 display_errors= On ,那么打开一个有异常的页面会出现彩色提示。

Screenshot from 2013-04-03 15:51:52

配置远程调试

这时可以配置远程调试。在 /etc/php.d/xdebug.ini 中写入如下几行:

1
2
3
4
5
[Xdebug]
xdebug.remote_autostart=On
xdebug.remote_enable=On
xdebug.remote_host=127.0.0.1
xdebug.remote_handler=dbgp

Linux 下 Eclipse 的外观修改(图标大小)

在Linux(F18+gnome3)下用Eclipse最显著的一个特点是图标特别的“大气”,菜单栏都到两行了,就是图标特别的大。给张图就明白了:

before

今天突然有改了它的冲动,百度之,曰为gtk2的风格问题。不过,百度出来的答案都没用,于是google,得之:

https://www.davidandrzejewski.com/2012/08/03/make-eclipse-less-ugly-in-linux-mint/

文中的配置有一点不妥,引用如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
style "compact"
{
GtkButton::default_border={0,0,0,0}
GtkButton::default_outside_border={0,0,0,0}
GtkButtonBox::child_min_width=0
GtkButtonBox::child_min_heigth=0
GtkButtonBox::child_internal_pad_x=0
GtkButtonBox::child_internal_pad_y=0
GtkMenu::vertical-padding=1
GtkMenuBar::internal_padding=1
GtkMenuItem::horizontal_padding=4
GtkToolbar::internal-padding=1
GtkToolbar::space-size=1
GtkOptionMenu::indicator_size=0
GtkOptionMenu::indicator_spacing=0
GtkPaned::handle_size=4
GtkRange::trough_border=0
GtkRange::stepper_spacing=0
GtkScale::value_spacing=0
GtkScrolledWindow::scrollbar_spacing=0
GtkExpander::expander_size=10
GtkExpander::expander_spacing=0
GtkTreeView::vertical-separator=0
GtkTreeView::horizontal-separator=0
GtkTreeView::expander-size=12
GtkTreeView::fixed-height-mode=TRUE
GtkWidget::focus_padding=0
font_name="Liberation Sans,Sans Regular 8"
text[SELECTED] = @selected_text_color
}
class "GtkWidget" style "compact"
style "compact2"
{
xthickness=1
ythickness=1
}

class "GtkButton" style "compact2"
class "GtkToolbar" style "compact2"
class "GtkPaned" style "compact2"

第30行使tweak丧失了对程序字体的控制权,有越俎代庖之嫌,删去。
第5行个人觉得边框太小,故改为1 。
最终解决方案:

~/gtkrc-2.0文件中添加如下语句:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
style "compact"
{
GtkButton::default_border={1,1,1,1}
GtkButton::default_outside_border={0,0,0,0}
GtkButtonBox::child_min_width=0
GtkButtonBox::child_min_heigth=0
GtkButtonBox::child_internal_pad_x=0
GtkButtonBox::child_internal_pad_y=0
GtkMenu::vertical-padding=1
GtkMenuBar::internal_padding=1
GtkMenuItem::horizontal_padding=4
GtkToolbar::internal-padding=1
GtkToolbar::space-size=1
GtkOptionMenu::indicator_size=0
GtkOptionMenu::indicator_spacing=0
GtkPaned::handle_size=4
GtkRange::trough_border=0
GtkRange::stepper_spacing=0
GtkScale::value_spacing=0
GtkScrolledWindow::scrollbar_spacing=0
GtkExpander::expander_size=10
GtkExpander::expander_spacing=0
GtkTreeView::vertical-separator=0
GtkTreeView::horizontal-separator=0
GtkTreeView::expander-size=12
GtkTreeView::fixed-height-mode=TRUE
GtkWidget::focus_padding=0
}
class "GtkWidget" style "compact"
style "compact2"
{
xthickness=1
ythickness=1
}
class "GtkButton" style "compact2"
class "GtkToolbar" style "compact2"
class "GtkPaned" style "compact2"

效果:


ProFTPD限制FTP模式

以前搞过ProFTPD禁止主动模式,但是这两天有这个需求的时候却忘记了,看来得写一日志记录下。

首先,环境是 fedora 17 + proftp 。

默认的配置是主动模式和被动模式都可用。

主动模式下访问记录:

1
2
3
4
Command:   
PORT 127,0,0,1,237,87
Response:    200
PORT command successful

被动模式访问记录:

1
2
Command:    PASV
Response:    227 Entering Passive Mode (127,0,0,1,157,107).

如果需要禁止主动模式访问,则只需要在/etc/proftd.conf<Global>段中添加如下三行:

1
2
3
<Limit PORT>
DenyAll
</Limit>

即禁止PORT指令,则主动模式访问记录变为:


Linux下管理MP3文件(乱码,临时文件)

很多MP3文件在Linux的播放器中都显示乱码,原理在此:http://www.linuxdiyf.com/viewarticle.php?id=57099

另外,Linux下有的音乐播放器会在目录下创建隐藏文件,备份时当然要删除这些文件了。

  1. 删除目录下除MP3和LRC文件以外的其他文件:
1
find ./ -type f ! -iname \*.mp3 ! -iname \*.lrc -exec rm -v \{\} \;
  1. 删除空目录:
1
find ./ -type d -empty -delete

注意:此处不能用 -exec rm ,因为删除目录时find命令仍然在这个目录,会报错。

  1. 修复MP3文件的标签:
1
find ./ -type f -iname \*.mp3 -exec mid3iconv -e gbk \{\} –remove-v1 \;

注:经测试 mid3iconv -e gbk X.mp3 –remove-v1 不会改变原来正常MP3文件的编码。


如何预览翻译的 Fedora 文档(使用 Publican)

首先要在 transifex.com 网站注册,并加入翻译组。(此处不赘述)

fedora的文档,至少本文的例子 Fedora System Administrator’s Guide → FTP 使用 Publican 写作,所以我们从翻译网站上拿到的仅仅是包括了文章“词条”的po文件。我们翻译的时候肯定要“预览”,所以必须拿到文档源码,本文中的文档源码在 git://git.fedorahosted.org/docs/system-administrators-guide.git

首先,获取文档源码:

1
git clone git://git.fedorahosted.org/docs/system-administrators-guide.git

切换到目录:

1
cd system-administrators-guide

测试生成文档:

1
make

提示:/bin/sh: publican: command not found 那就安装此工具:

1
yum install publican-doc publican-fedora

Robert Lu

关注我的公众号