return 0; } 编译:gcc -o test test.c -ldl。在这个例子中,/lib/libm.so.6是动态加载库,而/usr/lib/libdl.so则是共享库。
5.相关知识 5.1 nm命令 nm(1)命令可以报告库的符号列表,对于查看库的相关信息是一个不错的工具。具体使用查看帮助文档。示例: $nm -D libavcodec-0.4.7.so | grep 263 结果如下: 00116438 T ff_clean_h263_qscales 00122d14 T ff_h263_decode_end 001223d4 T ff_h263_decode_frame 00121340 T ff_h263_decode_init 0011048c T ff_h263_decode_mb 0011652c T ff_h263_get_gob_height 0010e664 T ff_h263_resync 00041744 T ff_h263_round_chroma 0010810c T ff_h263_update_motion_val 00115f64 T flv_h263_decode_picture_header 0010da98 T h263_decode_init_vlc 001127c8 T h263_decode_picture_header 001ab040 D h263_decoder 00106c44 T h263_encode_gob_header 0010b2b0 T h263_encode_init 00109d40 T h263_encode_mb 00105f94 T h263_encode_picture_header 001a85a0 D h263_encoder 001162d0 T h263_get_picture_format 0010a7b4 T h263_pred_motion 00106df8 T h263_send_video_packet 001ab180 D h263i_decoder 001a85e0 D h263p_encoder 00115c68 T intel_h263_decode_picture_header 其中,T表示正常代码段,D表示初始化数据段
5.3脚本共享库 linux中,共享库可以是脚本形式,当然需要专门的脚本语言。/usr/lib/libc.so是一个典型的例子,内容如下: /* GNU ld script Use the shared library, but some functions are only in the static library, so try that secondarily. */ OUTPUT_FORMAT(elf32-i386) GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a )
5.9关于C++程序的启动速度 C++应用程序的启动速度是比较慢的。我一直使用firefox,感受颇深。有人认为这是因主函数启动之前的代码重定位所导致。有一篇文章"making C++ ready for the desktop"(by Waldo Bastian)对这问题作了分析。我读了一下,理解不是很深刻。
5.10 Linux Standard Base(LSB) LSB是一个项目,致力于制订和推动一系列标准,尽力提高不同Linux发布版本之间的兼容性,从而为应用程序的开发提供一致性的接口。关于linux标准项目的详细信息,可查阅网站。