平台与链接库 平台通常也会伴随着链接库,没有链接库的平台,等于是摆明了不希望别人开发此平台的程序。比方说,你想用 Visual C++ 6 开发 Windows 程序,你需要用到 GDI32 以及 USER32 或 MFC 等链接库。写 Mac OS 9 的程序,需要 Carbon 链接库。
平台的链接库 vs 语言的链接库 在 A 平台上用 B 语言开发软件,你会同时面对 A 平台的链接库和 B 语言的链接库,此二链接库因为是不同厂商所提供的,所以可能无法百分之百契合,特别是牵涉到内存管理、资源管理、执行绪等和操作系统有密切关系的主题时。如果你想进行的某功能在 A 平台的链接库和 B 语言的链接库都有提供,那么你应该使用 A 平台链接库的版本,通常比较安全些。比方说,用 C 语言开发 Windows 平台的程序,如果你想配置内存,那么你应该呼叫 Win32 API 的版本(比方说 GlobalAlloc()),而非 C 语言的版本(比方说 malloc())。
跨平台的链接库 你为某平台所开发的程序,为什么不能在别的平台上重新编译之后就能执行?问题就出在平台的链接库上。比方说,你用 C 语言搭配 C 的标准链接库和 Win32 链接库,在 Windows 平台上开发出一个演示文稿软件 WeakPoint 2000;你将 WeakPoint 2000 的原始程序拿到 Linux 上编译,却无法编译成功,问题就出在 Linux 没有 Win32 的链接库。
那么,如果有一个链接库将各个主要平台的链接库萃取(abstract)出一个共通的链接库,不就可以解决这个问题了。例如 Qt 正是这么做,你的 C++ 程序如果只使用标准的 C++ 链接库和 Qt 链接库,你就可以把程序重新编译之后在不同的平台(Linux,Unix,Windows)上执行。
跨语言的链接库 Borland 的 VCL 链接库是在 Windows 平台上相当受好评的一套链接库,可以被 C++ 和 Object Pascal(Delphi)使用。其实「跨语言的链接库」不是一种很好的说法,毕竟许多语言都可以连结外部原生链接库,两者不需要是同一种语言。但是这样的连结是否需要大费周章,则有相当大的差异。而 Delphi 和 C++ Builder 使用 VCL 则是相当方便的。
即将在本月底问世的 Mac OS X,提供了 Cocoa 链接库。Cocoa 链接库可以被 Objective-C 和 Java 语言使用。Objective-C 和 Java 语言版的 Cocoa 链接库相似性在九成以上。Java 在 Mac OS X 的原生程序设计上被简化成一个纯语言,完全不使用 Java 的 API,只使用 Cocoa 链接库,这倒是挺特别的。(当然 Mac OS X 也另外会有 JVM 来支持一般的 J2SE)