C++ 在AIX7.1上为ICU生成so文件
我正在尝试使用vaC++11.1在AIX7.1上编译ICU49.1.2 默认情况下,ICU make文件配置为生成.a文件,而不是.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'
/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 $< $@