通常".a"
确实意味着静态库。然而,在改编描述 AIX 5 共享库配置的初始报告( 2008 年".a"
)时,出现了一些误传,并同时用于静态库和共享库。这终于在去年得到纠正(请参阅变更日志)。
顺便说一下,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.
whilefile
可能会提供更多信息:
libncurses.a: executable (RISC System/6000) or object module not stripped
但是,您可以从源代码构建 ncurses。在这种情况下(无论是什么版本),默认构建静态库。您不需要将它们安装到系统区域,但可以使用--prefix
安装到不同目录的选项配置 ncurses。
正如另一个答案中所建议的,有一个使用AIX (加载器)的-bdynamic
and选项的解决方法,例如,更改-bstatic
ld
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