0

我是使用 iPhone 构建 pjsip 的新手。我正在使用 iOS 9.3.2、Xcode 7.3 和 Pjsip 2.5。我已经成功构建了没有 g729 的 Pjsip 2.5,并且没有 g729 也可以正常工作。由于我的应用程序也需要 g729,因此我遵循此处的所有说明

使用上述步骤启用 g729 后,在 "make dep && make clean && make" 时,它会为我用于我的应用程序的所有架构提供以下错误。

../src/pjsua2-test/main.cpp
if test ! -d ../bin; then mkdir -p ../bin; fi
/Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/../../../Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -o ../bin/pjsua2-test-armv7-apple-darwin_ios \
         output/pjsua2-test-armv7-apple-darwin_ios/main.o -L/MyApps/pjproject/pjlib/lib -L/MyApps/pjproject/pjlib-util/lib -L/MyApps/pjproject/pjnath/lib -L/MyApps/pjproject/pjmedia/lib -L/MyApps/pjproject/pjsip/lib -L/MyApps/pjproject/third_party/lib           -O2 -arch armv7 -isysroot /Applications/XCode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk -framework AudioToolbox -framework Foundation -lpjsua2-armv7-apple-darwin_ios -lstdc++ -lpjsua-armv7-apple-darwin_ios -lpjsip-ua-armv7-apple-darwin_ios -lpjsip-simple-armv7-apple-darwin_ios -lpjsip-armv7-apple-darwin_ios -lpjmedia-codec-armv7-apple-darwin_ios -lpjmedia-armv7-apple-darwin_ios -lpjmedia-videodev-armv7-apple-darwin_ios -lpjmedia-audiodev-armv7-apple-darwin_ios -lpjmedia-armv7-apple-darwin_ios -lpjnath-armv7-apple-darwin_ios -lpjlib-util-armv7-apple-darwin_ios  -lsrtp-armv7-apple-darwin_ios -lresample-armv7-apple-darwin_ios -lgsmcodec-armv7-apple-darwin_ios -lspeex-armv7-apple-darwin_ios -lilbccodec-armv7-apple-darwin_ios -lg7221codec-armv7-apple-darwin_ios  -lpj-armv7-apple-darwin_ios -lm -lpthread  -framework CoreAudio -framework CoreFoundation -framework AudioToolbox -framework CFNetwork -framework UIKit -framework UIKit -framework OpenGLES -framework AVFoundation -framework CoreGraphics -framework QuartzCore -framework CoreVideo -framework CoreMedia 
Undefined symbols for architecture armv7:
  "_pjmedia_codec_g729_init", referenced from:
      _pjmedia_codec_register_audio_codecs in libpjmedia-codec-armv7-apple-darwin_ios.a(audio_codecs.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [../bin/pjsua2-test-armv7-apple-darwin_ios] Error 1
make[1]: *** [pjsua2-test-armv7-apple-darwin_ios] Error 2
make: *** [all] Error 1

我真的被困在这里了。请帮我解决这个问题。任何人的一条线索都会有所帮助。

4

1 回答 1

0

如果您按照您提到的链接进行操作,您需要做的修改很少。

  1. pjmedia/build/Makefile:
export PJMEDIA_CODEC_OBJS += audio_codecs.o ffmpeg_vid_codecs.o openh264.o\

                        h263_packetizer.o h264_packetizer.o \

                        $(OS_OBJS) $(M_OBJS) $(CC_OBJS) $(HOST_OBJS) \

                        ipp_codecs.o silk.o opus.o $(CODEC_OBJS) \

                        g7221_sdp_match.o amr_sdp_match.o **g729.o**
  1. pjmedia/build/os-auto.mak.in:
 export CFLAGS += -I$(THIRD_PARTY)/g729/**Headers** 

-DPJMEDIA_HAS_G729_CODEC=1
  1. 如下更改生成文件 (third_party/build/g729/Makefile) :

注意:请确保您遵循makefile的规则,如果在任何情况下出现任何错误。要确认,请先使用make命令构建third_party/build/g729/Makefile。看看它是否成功,那么完整的构建也将成功.)

    include ../../../build.mak

    include ../../../build/common.mak

    export LIBDIR := ../../lib

    RULES_MAK := $(PJDIR)/build/rules.mak

    export G729_CODEC_LIB := libg729codec-$(TARGET_NAME)$(LIBEXT)

    export _CFLAGS  := $(CC_CFLAGS) $(OS_CFLAGS) $(HOST_CFLAGS) $(M_CFLAGS) \
                   $(CFLAGS) $(CC_INC)../.. $(CC_INC)../../g729/Headers \
                   $(CC_INC)../../../pjlib/include

     export _CXXFLAGS:= $(_CFLAGS) $(CC_CXXFLAGS) $(OS_CXXFLAGS) $(M_CXXFLAGS) \
                   $(HOST_CXXFLAGS) $(CXXFLAGS)

    export _LDFLAGS := $(CC_LDFLAGS) $(OS_LDFLAGS) $(M_LDFLAGS) $(HOST_LDFLAGS) \
                   $(LDFLAGS)

    export G729_CODEC_SRCDIR = ../../g729

    export G729_CODEC_OBJS = Sources/acelp_ca.o Sources/cod_ld8a.o Sources/dec_gain.o Sources/dspfunc.o Sources/g729a_encoder.o \
                         Sources/lpcfunc.o Sources/oper_32b.o Sources/post_pro.o Sources/pred_lt3.o Sources/tab_ld8a.o \
                         Sources/basic_op.o Sources/cor_func.o Sources/dec_lag3.o Sources/filter.o Sources/gainpred.o \
                         Sources/lspdec.o Sources/p_parity.o Sources/postfilt.o Sources/qua_gain.o Sources/taming.o \
                         Sources/bits.o Sources/de_acelp.o Sources/dec_ld8a.o Sources/g729a_decoder.o Sources/lpc.o \
                         Sources/lspgetq.o Sources/pitch_a.o Sources/pre_proc.o Sources/qua_lsp.o Sources/util.o



    export G729_CODEC_CFLAGS = $(_CFLAGS)

    TARGETS := $(G729_CODEC_LIB)


    all: $(TARGETS)


    doc:
        cd .. && doxygen docs/doxygen.cfg


    dep: depend


    distclean: realclean



    .PHONY: dep depend clean realclean distclean

    .PHONY: $(TARGETS)

    .PHONY: $(G729_CODEC_LIB)

    libg729codec: $(G729_CODEC_LIB)

    $(G729_CODEC_LIB):
        $(MAKE) -f $(RULES_MAK) APP=G729_CODEC app=libg729codec $(subst /,$(HOST_PSEP),$(LIBDIR)/$@)


    clean print_lib:
        $(MAKE) -f $(RULES_MAK) APP=G729_CODEC app=libg729codec $@


    realclean:
        $(subst @@,$(subst /,$(HOST_PSEP),.libg729codec-$(TARGET_NAME).depend),$(HOST_RMR))

        $(MAKE) -f $(RULES_MAK) APP=G729_CODEC app=libg729codec $@


    depend:
        $(MAKE) -f $(RULES_MAK) APP=G729_CODEC app=libg729codec $@
于 2016-06-02T11:20:13.310 回答