在 AIX 7.1 上为 ICU 生成 so 文件

generating so files for ICU on AIX 7.1

我正在尝试使用 vaC++ 11.1 在 AIX 7.1 上编译 ICU 49.1.2。

默认情况下,ICU make 文件配置为生成 .a 文件而不是 .so 文件。

有一个选项可以更改 /source/config/mh-aix-va 文件中的共享库扩展类型。

SO = a -> 这个可以改成so来生成so文件

但是当我把它改成这样时,我得到如下错误。知道生成 .so 文件还需要做什么吗?

gmake[1]: Leaving directory `/export/home/cmbabu/xml/icu/source/common'
gmake[1]: Entering directory `/export/home/cmbabu/xml/icu/source/common'
gmake[1]: * No rule to make target `../lib/libicuuc.so', needed by `all-local'.  Stop.
gmake[1]: Leaving directory `/export/home/cmbabu/xml/icu/source/common'
gmake: *** [all-recursive] Error 2

提前致谢。

AIX 默认情况下(除非您 link 和 -brtl)期望共享库具有后缀 .a。所以你不应该将 SO=a 更改为 SO=so 除非你也取消注释 makefile 中的 -brtl 标志。

生成文件中的注释暗示了这一点:

without the -brtl option, the library names use .a. AIX is funny that way.

为了消除错误并成功生成 so 文件,我进行了大量试验和错误,最终得出了如下所述的解决方案。

我必须修改一些现有规则并在 config/mh-aix-va 文件中添加更多规则。

变化是...

第 17 行和第 18 行:取消注释第 18 行

# If you readd this line, you must change the SO value
LDFLAGS += -brtl

第 80 行和第 81 行:更改第 81 行

# without the -brtl option, the library names use .a. AIX is funny that way.
SO= so

第 92 至 99 行: 注释所有这些行

#%.a : %.so
#   ln -f $< $(SHARED_OBJECT_NO_VERSION) 
#   $(AIX_PREDELETE) $(AR) $(ARFLAGS) $@ $(SHARED_OBJECT_NO_VERSION)
#   rm -f $(SHARED_OBJECT_NO_VERSION)
#$(LIBDIR)/%.a : %.so
#   ln -f $< $(SHARED_OBJECT_NO_VERSION) 
#   $(AIX_PREDELETE) $(AR) $(ARFLAGS) $@ $(SHARED_OBJECT_NO_VERSION)
#   rm -f $(SHARED_OBJECT_NO_VERSION)

在第 100 行添加以下行:

$(LIBDIR)/%.so : %.so
    ln -f $< $@
$(LIBDIR)/%$(SO_TARGET_VERSION).so : %.so
    ln -s $< $@
$(LIBDIR)/%$(SO_TARGET_VERSION_MAJOR).so : %.so
    ln -s $< $@