GCC 常用编译选项及相关工具

这篇文章是对 gcc/g++ 经常使用的编译选项和有关工具的一个简单记录,包括静态库和共享库的生成和使用,以便备忘。

1、编译选项

-E 只进行预处理,不进行编译和连接,其输出默认是到终端。(x.c => x.i , x.cpp => x.ii)
-S 编译后仅生成汇编语言文件(x.cpp , x.ii => x.s),不生成目标文件。
-c 编译后生成目标文件(x.cpp , x.ii , x.s => x.o),不连接程序。
-save-temps 保留所有中间过程生成的文件,即 x.ii , x.s , x.o 文件。
-o 输出到文件,指定输出文件名。
-Wall 显示编译过程中的所有警告信息。
-g 在可执行文件中加入标准调试信息,用于程序调试。
-On 进行编译优化,n为优化级别,范围是0~3,在gcc-4.8中还可以用g,即-Og,有利于调试。
-Idir 将目录dir添加到头(Include)文件搜索范围
-Ldir 将目录dir添加到库(Library)文件搜索范围
-lmylib 连接时使用共享库libmylib.so(如果没有,就使用静态库libmylib.a),一般被调用者在调用者之后。
-Dname[=var] 定义宏变量name[=var]

Continue reading »

UEFI + GPT

在之前的文章《Linux on ASUS N550JK4700》中的系统分区那一节,由于当时我对UEFI不了解,我曾在BIOS中打开了[Launch CSM]选项,意在不使用UEFI,实际上这是一个很糟糕的选择。相比于UEFI,传统的BIOS实在是太落后了。具体的内容可以Google一下或查看Wikipedia,关于 BIOS + MBR 和 UEFI + GPT 的比较,下面作一个简单地介绍。

现代磁盘的内部区块定位一般都采用 LBA 机制,每一个(逻辑)区块又称作一个 Logical Sector(有别于 Physical Sector),区块的编址为一个整数,起始为 0 ,即 LBA 0、LBA 1、LBA 2 …… 每一个逻辑区块的大小为 512B 。磁盘的分区与格式化都是在这个基础上的。先看看大家都熟知的 BIOS + MBR 方案,传统的 BIOS 是运行在 16 位实模式下的,寻址能力十分有限而且运行缓慢,磁盘的分区采用 Master boot record,即在整个磁盘的第一个逻辑扇区(LBA 0)的只有512B的空间里包含了主引导程序和分区表。由于空间的限制,MBR是有很多局限性的:只能有四个主分区,磁盘总大小不能超过2TiB等。UEFI是由Intel公司引入的固件接口,它要比传统BIOS先进得多,它与传统BIOS有一些根本的区别:(1)UEFI直接运行在64位保护模式下;(2)UEFI能直接识别FAT32文件系统,并能读取里面的文件(之所以是FAT格式,是因为历史原因导致FAT格式的跨平台兼容性最好);(3)系统引导程序文件在分区(ESP分区)中,而不是在第一个逻辑扇区中;(4)磁盘分区方案采用GUID Partition Table,即GPT,相对于MBR,这种分区表有很多优势,如主分区的个数(几乎)不受限制。

Continue reading »

Linux on ASUS N550JK4700

实际上,ASUS N550JK对Ubuntu 14.04的兼容性是相当好的,包括无线网卡、蓝牙、键盘背光的调节、触摸板的开关、音量的键盘调节都是安装后无需配置直接可以使用的,这是出乎意料的,因为这些功能在Windows中都是只能在安装上华硕的官方驱动后才可以正常使用的,而在Ubuntu中则都是"Works out of the box"。但还有一些其他的细节问题需要调整解决,下面将作一个简要的总结。

1、硬件软件信息

(1)ASUS N550JK4700 (8G/1T) : 2014年3月出厂

  • Intel Core i7 4700HQ Processor
  • Integrated Intel HD Graphics 4600 + NVIDIA GeForce GTX850M with 4GB DDR3 VRAM
  • 15.6" 16:9 IPS FHD (1920x1080) LED Backlight Non-Glare LCD Panel
  • Keyboard backlight

(2)Ubuntu 14.04 LTS : 2014年4月18日(北京时间)发布

Continue reading »

生而为赢

——摘自《新东方-生而为赢》

人皆生而为新,为前所未有之存在;人皆生而能赢。人皆有其特立独行之方式去审视、聆听、触摸品味及思考,因而都具备独特潜质——能力和局限。人皆能举足轻重,思虑明达,洞察秋毫,富有创意,成就功业。

“成者”与“败者”含义颇多。淡及成者,我们并非指令他人失意之人。对我们而言,成者必为人守信,值得信赖,有求必应,态度诚恳,或为个人,或为社会一员皆能以真诚回应他人。

成者行事并不拘泥于某种信条,即便是他们认为应为其奉献一生的理念;而是本色行事,所以并不把精力用来表演,保持伪装或操控他人。他们明了爱与装爱,愚蠢与装傻,博学与卖弄之间迥然有别。成者无须藏于面具之后。

成者敢于利用所学,独立思考,区分事实与观点,且并不佯装通晓所有答案。他们倾听、权衡他人意见,但能得出自己的结论。尽管他们尊重、敬佩他人,但并不为他所局限、所推翻、所束缚,也不对他人敬若神灵。

成者既不佯装“无助”,亦不抱怨他人。相反,他们对人生总能独担责任,也不以权威姿态凌驾于他人之上。他们主宰自己,而且能意识到这点。

Continue reading »

球协函数图像的绘制

本文利用 Python 编程语言实现归一化球协函数图像的数据准备,并用 Mathematica 绘制图像。

归一化球协函数为:

 Y_{lm}(\theta,\phi)=\sqrt{\frac{2l+1}{4\pi}\frac{(l-m)!}{(l+m)!}}P_l^m(\cos(\theta))e^{im\phi}

其中 l=0,1,2,\cdots,m=0,\pm 1,\pm 2, \cdots, \pm l,\quad P_l^m(\cos \theta) 为连带勒让德函数

m>0 时,把 m 递归到零:

\sqrt{1-x^2}P_l^m(x)=\frac{1}{2l+1}[(l-m+1)(l-m+2)P_{l+1}^{m-1}(x)-(l+m-1)(l+m)P_{l-1}^{m-1}(x)]

m<0 时,把 m 递归的零:

\sqrt{1-x^2}P_l^m(x)=\frac{1}{2l+1}[P_{l-1}^{m+1}(x)-P_{l+1}^{m+1}(x)]

m=0 时,把 l 递归到零:

(l-m)P_l^m(x)=(2l-1)xP_{l-1}^m(x)-(l+m-1)P_{l-2}^m(x)

利用以上三式就可以通过递归程序定义连带勒让德函数。

下面是 Python 程序代码

Continue reading »