通常".a" 确实意味着静态库。然而,在改编描述 AIX 5 共享库配置的初始报告(2008)时,出现了一些误传,".a" 用于静态库和共享库。去年终于纠正了这一点(请参阅changelog)。
顺便说一下,AIX 4 使用了一个更复杂的方案,因此 ncurses 的共享库首先在 AIX 5 上实现。
打包者更喜欢共享库。因此,您拥有的是一个名为libncurses.a 的共享库(合法,但不传统)。这不是使用归档程序ar 创建的,而是使用加载程序ld 创建的。看他们不一样,你可以试试
ar tv libncurses.a
(使用适当的目录)。 ar 可能会说类似
ar: 0707-108 File libncurses.a is not an archive file.
虽然file 可能会提供更多信息:
libncurses.a: executable (RISC System/6000) or object module not stripped
但是,您可以从源代码构建 ncurses。在这种情况下(无论是什么版本),默认构建静态库。您无需将它们安装到系统区域,但可以使用 --prefix 选项配置 ncurses 以安装到不同的目录。
正如另一个答案中所建议的,使用 AIX 的 ld(加载器)的 -bdynamic 和 -bstatic 选项有一个解决方法,例如,更改
xlc -o foo foo.c -lncurses
到
xlc -o foo foo.c -bstatic -lncurses -ldynamic
但是,这部分取决于加载程序的搜索路径和存档的名称。如果存档名为libncurses.a,则该命令按给定的方式工作。如果它被命名为libncurses.so(在当前的源代码中),那么需要这个命令来链接共享库:
xlc -o foo foo.c -brtl -lncurses
但是这个命令(有人可能认为它使用libncurses.so 文件提供静态链接)没有成功:
xlc -o foo foo.c -brtl -bstatic -lncurses -bdynamic