2008年10月17日星期五

人情世故

人情世故是我们日常生活中积累的约定俗成的行为规则,属于社会知识的范畴。这些知识大半 来源于与不同人群的社会交际,也来源于社会冲突与社会发展。在有专业知识与技能的情况下,人情世故能够帮助我们个人缓和与其他人之间的紧张度,也比较容易 让其他人感到与我们交往的愉悦感与建设性。这里举出对于我们每个人也许都能用到、但却常被忽略的日常生活中的18个人情世故。

1、即使不是对大人物,我们也要用请教的态度口吻而不是傲慢的姿态与他们说话,因为人不可貌相,很多实用的良师益友往往来自不起眼的生活与工作中。

2、在吃饭的场合做主动点菜者,不适合请主人与主宾点菜,因为那不是尊贵者通常做的事情,但是请注意询问他们的喜好,而不是只管点自己爱吃的东西。但是这需要平时研究菜单,积累点菜的经验。上桌的时候要尊重主人的安排,不要贸然先行入席。

3、经常找到朋友、伙伴与同事(甚至小孩子)值得肯定的方面,注意哦,即使老板也需要被你肯定,但是对上者的赞扬应尽量在私下场合,而对于一般朋友与同事则应公开赞扬。

4、在受到别人对自己的相貌、事情、人品赞扬时,不要表现出理所当然的样子,也不要假意否认,合适的方式是表示感谢,尤其感谢朋友的肯定与支持。

5、学会使用便条,包括借条、领条、请假条、申请信,如果你很主动地使用这些便条会让其他人感到你很规范,而且如果你懂得请其他人这样做,你未来就能更好与他们有凭有据地打交道。会写便条会让别人刮目相看。

6、即使你不是服务人员,在朋友或者同事有客人来的时候主动倒水,会让朋友与同事很有面子,也会让客人觉得你的朋友与同事很有威望。这会让你的朋友与同事特别感谢你的姿态。

7、虽然你觉得你是新手或者地位比较低的人,但是你要勇于不耻下问,也要做到主动询问别人的需要,而不要等领导或者资深的同事对你表现出亲和,因为他们这样表现往往需要特别的努力。

8、记得在别人不在座位的时候很热情地帮助接听与记录电话、接受信件、传递信息,对团队的同事与同学,提醒他们一些你知道的重要日程。

9、在征询了别人意见之后才进入别人的房间,阅览别人的书架或者室内物品,在经别人同意的情况下才用别人的电脑,坐在别人的私人座位上,但通常不去翻动别人的笔记本。

10、出席别人的活动需要有邀请,如果不能出席应提前通知,迟到的话要在适当的时间点上通知主人,到了以后要解释,带未经邀请的朋友要事前通知主人。

11、不适合向别人索要礼物,收到别人的礼品不管是不是喜欢要表示感谢,因为送礼者会很在乎你的反应,不适合把一处的礼物转送给另一处,尤其还保留原来送礼者的符号与痕迹就显得很没有礼貌了。

12、在有多个出席者的场合,主动介绍自己的朋友给其他人,或者主动在你认识的朋友之间穿针引线。那些被缓解了陌生感的朋友会特别感谢你。

13、 有不同地位的朋友在的场合,都要保持微笑,体贴地招呼下那些内向的、不为人注意的、可能有点自卑感的朋友,在社交中对弱势者的帮助会得到别人特别的感激。 对于社会地位较低者,尤其在有你不能适应的生活条件与生活习惯时,要克制自己所想表现出的不适感与负面表情,尽量主动先打招呼。
14、有好东西吃的时候不要吃独食,主动地告诉他们你知道的好消息,在有好事情的时候能想到别人会让别人觉得你把他们当好朋友。
15、 有人做错了事,不要用情绪性的方式加以批评,尤其要注意就事论事,避免评价了别人的人格、个性与家庭教养。批评时能提出解决方案就更有建设性。批评时应不 忘肯定别人的长处。如批评时能较幽默,往往负面效果就更少。被批评或者遇到尴尬的时候能幽默自嘲,也能提高交流的建设性。
16、好汉不吃眼前亏。但是在另外很多时候,如果问题争执不下,也不要继续火上浇油,冷静下来,多收集一些数据材料与想得更明白点再说。

17、在你不能有充分把握的时候,用"争取"与"尽量"这样的口吻回答别人的邀约,承诺了就要最大限度去履行。诺言是指100%做到的事情。如果你有了三次甚至更多的对同一个人没有履行诺言的记录,那个人通常就不再认真地对待你的约定,这就是所谓的信用问题。

18、我们要尽量不谈回报地先为别人做点什么,这样就赢得了在心理上比别人优越的债权感。一个人的社会地位是别人对他负有的社会债务感的总和。

Linux连接库的生成

库有动态与静态两种,动态通常用。so为后缀,静态用。a为后缀。例如:libhello.so
libhello.a
  为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如:
libhello.so.1.0,由于程序连接默认以。so为文件后缀名。所以为了使用这些库,通常使用建立符号连接的方式。
  ln -s libhello.so.1.0 libhello.so.1
  ln -s libhello.so.1 libhello.so

  使用库
  当要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。然而,对动态库而言,就不是这样。动态库会在执行程序内留下一个标记'指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux下进行连接的缺省操作是首先连接动态库,也就是说,如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。
 
  现在假设有一个叫hello的程序开发包,它提供一个静态库libhello.a
一个动态库libhello.so,一个头文件hello.h,头文件中提供sayhello()这个函数 
  /* hello.h */
  void sayhello();
  另外还有一些说明文档。这一个典型的程序开发包结构
  1.与动态库连接
  linux默认的就是与动态库连接,下面这段程序testlib.c使用hello库中的sayhello()函数
  /*testlib.c*/
  #include
  #include
 
  int main()
  {
  sayhello();
  return 0;
  }
 
  使用如下命令进行编译
 
  $gcc -c testlib.c -o testlib.o
 
  用如下命令连接:
 
  $gcc testlib.o -lhello -o testlib
 
  在连接时要注意,假设libhello.o
和libhello.a都在缺省的库搜索路径下/usr/lib下,如果在其它位置要加上-L参数
 
  2. 与静态库连接麻烦一些,主要是参数问题。还是上面的例子:
 
  $gcc testlib.o -o testlib -WI,-Bstatic -lhello
 
  注:这个特别的"-WI,-Bstatic"参数,实际上是传给了连接器ld.
 
  指示它与静态库连接,如果系统中只有静态库当然就不需要这个参数了。
 
  如果要和多个库相连接,而每个库的连接方式不一样,比如上面的程序既要和libhello进行静态连接,又要和libbye进行动态连接,其命令应为:
 
  $gcc testlib.o -o testlib -WI,-Bstatic -lhello -WI,-Bdynamic –lbye
 
  3.动态库的路径问题
 
  为了让执行程序顺利找到动态库,有三种方法:
 
  (1)把库拷贝到/usr/lib和/lib目录下。
 
  (2)在LD_LIBRARY_PATH环境变量中加上库所在路径。例如动态库libhello.so在/home/ting/lib目录下,以bash为例,使用命令:
 
  $export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/ting/lib
 
  (3)
修改/etc/ld.so.conf文件,把库所在的路径加到文件末尾,并执行ldconfig刷新。这样,加入的目录下的所有库文件都可见。
4.查看库中的符号
 
  有时候可能需要查看一个库中到底有哪些函数,nm命令可以打印出库中的涉及到的所有符号。库既可以是静态的也可以是动态的。nm列出的符号有很多,常见的有三种,一种是在库中被调用,但并没有在库中定义(表明需要其他库支持),用U表示;一种是库中定义的函数,用T表示,这是最常见的;另外一种是所谓的"弱态"符号,它们虽然在库中被定义,但是可能被其他库中的同名符号覆盖,用W表示。例如,假设开发者希望知道上文提到的hello库中是否定义了
printf():
 
  $nm libhello.so |grep printf
 
  U printf
 
  U表示符号printf被引用,但是并没有在函数内定义,由此可以推断,要正常使用hello库,必须有其它库支持,再使用ldd命令查看hello依赖于哪些库:
 
  $ldd hello
 
  libc.so.6=>/lib/libc.so.6(0x400la000)
 
  /lib/ld-linux.so.2=>/lib/ld-linux.so.2 (0x40000000)
 
  从上面的结果可以继续查看printf最终在哪里被定义,有兴趣可以go on
 
  生成库
 
  第一步要把源代码编绎成目标代码。以下面的代码为例,生成上面用到的hello库:
 
  /* hello.c */
 
  #include
 
  void sayhello()
 
  {
 
  printf("hello,world\n");
 
  }
 
  用gcc编绎该文件,在编绎时可以使用任何全法的编绎参数,例如-g加入调试代码等:
 
  gcc -c hello.c -o hello.o
 
  (1)。连接成静态库
 
  连接成静态库使用ar命令,其实ar是archive的意思
 
  $ar cqs libhello.a hello.o
 
  (2)。连接成动态库
 
  生成动态库用gcc来完成,由于可能存在多个版本,因此通常指定版本号:
 
  $gcc -shared -Wl,-soname,libhello.so.1 -o libhello.so.1.0 hello.o
 
  另外再建立两个符号连接:
 
  $ln -s libhello.so.1.0 libhello.so.1
 
  $ln -s libhello.so.1 libhello.so
 
  这样一个libhello的动态连接库就生成了。最重要的是传gcc -shared
参数使其生成是动态库而不是普通执行程序。
 
  -Wl
表示后面的参数也就是-soname,libhello.so.1直接传给连接器ld进行处理。实际上,每一个库都有一个soname,当连接器发现它正在查找的程序库中有这样一个名称,连接器便会将soname嵌入连结中的二进制文件内,而不是它正在运行的实际文件名,在程序执行期间,程序会查找拥有
soname名字的文件,而不是库的文件名,换句话说,soname是库的区分标志。
 
  这样做的目的主要是允许系统中多个版本的库文件共存,习惯上在命名库文件的时候通常与soname相同
 
  libxxxx.so.major.minor
 
  其中,xxxx是库的名字,major是主版本号,minor 是次版本号。