在 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 $< $@
我正在尝试使用 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 $< $@