C++ 在AIX7.1上为ICU生成so文件

C++ 在AIX7.1上为ICU生成so文件,c++,c,aix,icu,C++,C,Aix,Icu,我正在尝试使用vaC++11.1在AIX7.1上编译ICU49.1.2 默认情况下,ICU make文件配置为生成.a文件,而不是.so文件 在/source/config/mh aix va文件中,可以选择更改共享库扩展的类型 SO=a->可以将其更改为SO以生成SO文件 但当我把它改为so时,我得到的错误如下。你知道还需要做些什么来生成.so文件吗 gmake[1]: Leaving directory `/export/home/cmbabu/xml/icu/source/common'

我正在尝试使用vaC++11.1在AIX7.1上编译ICU49.1.2

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

/source/config/mh aix va
文件中,可以选择更改共享库扩展的类型

SO=a->可以将其更改为SO以生成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默认情况下(除非您使用
-brtl
链接)希望共享库具有后缀
.a
。因此,您不应该将
So=a
更改为
So=So
,除非您还取消对makefile中的
-brtl
标记的注释

makefile中的注释暗示了这一点:

如果没有-brtl选项,库名称将使用.a。AIX这样做很有趣

默认情况下(除非使用
-brtl
)链接),AIX希望共享库具有后缀
.a
。因此,您不应该将
So=a
更改为
So=So
,除非您还取消对makefile中的
-brtl
标记的注释

makefile中的注释暗示了这一点:

如果没有-brtl选项,库名称将使用.a。AIX这样做很有趣


为了消除错误并成功生成so文件,我做了大量的尝试和错误处理,最后提出了一个解决方案,如下所述

我不得不修改一些现有的规则,并在config/mh aixva文件中添加更多的规则

变化是

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

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

第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)
#%.a:%.so
#ln-f$<$(共享对象无版本)
#$(AIX\u PREDELETE)$(AR)$(ARFLAGS)$@$(共享对象版本)
#rm-f$(共享对象无版本)
#$(LIBDIR)/%.a:%.so
#ln-f$<$(共享对象无版本)
#$(AIX\u PREDELETE)$(AR)$(ARFLAGS)$@$(共享对象版本)
#rm-f$(共享对象无版本)
在第100行添加以下行:

$(LIBDIR)/%.so:%.so
ln-f$<$@
$(LIBDIR)/%$(SO\u目标版本)。SO:%。SO
ln-s$<$@
$(LIBDIR)/%$(SO\u TARGET\u VERSION\u MAJOR)。SO:%。SO
ln-s$<$@

为了消除错误并成功生成so文件,我做了大量的尝试和错误,最后提出了一个解决方案,如下所述

我不得不修改一些现有的规则,并在config/mh aixva文件中添加更多的规则

变化是

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

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

第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)
#%.a:%.so
#ln-f$<$(共享对象无版本)
#$(AIX\u PREDELETE)$(AR)$(ARFLAGS)$@$(共享对象版本)
#rm-f$(共享对象无版本)
#$(LIBDIR)/%.a:%.so
#ln-f$<$(共享对象无版本)
#$(AIX\u PREDELETE)$(AR)$(ARFLAGS)$@$(共享对象版本)
#rm-f$(共享对象无版本)
在第100行添加以下行:

$(LIBDIR)/%.so:%.so
ln-f$<$@
$(LIBDIR)/%$(SO\u目标版本)。SO:%。SO
ln-s$<$@
$(LIBDIR)/%$(SO\u TARGET\u VERSION\u MAJOR)。SO:%。SO
ln-s$<$@

我知道这件事,并且已经取消了评论。但我得到了同样的错误,我知道这一点,并已联合国评论。但我也犯了同样的错误
#%.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)
$(LIBDIR)/%.so : %.so
    ln -f $< $@
$(LIBDIR)/%$(SO_TARGET_VERSION).so : %.so
    ln -s $< $@
$(LIBDIR)/%$(SO_TARGET_VERSION_MAJOR).so : %.so
    ln -s $< $@