2016-04-07 7 views
0

Webports、ffmpegを設定しました。私は現在のプロジェクトに次のMakefileを作成しました。しかし、私はffmpegライブラリのリンクにいくつかの問題を満たしています。PPAPIでのFFMPEGライブラリの使用:FFmpegでのNaclports

$ TOOLCHAIN=pnacl make 
    LINK pnacl/Release/client_unstripped.bc 
pnacl/Release/src/client.o: error: undefined reference to 'av_register_all' 
make: *** [pnacl/Release/client_unstripped.bc] Error 1 

あなたは私がここで間違ってやっているものを私に伝えることができ、私のMakefileを以下に示します。

VALID_TOOLCHAINS:?= pnacl glibcを打ち鳴らす-newlibのは

NACL_SDK_ROOT = $(ABSPATH $を獲得します(CURDIR)/../ ..)

TARGET =クライアント

OTHERDIR = SRC

INC_DIR = INC

FFMPEG_INC_DIR = ../../toolchain/mac_pnacl/le32-nacl/usr/include

は= -I $(INC_DIR)-I $(FFMPEG_INC_DIR)

を含み

は$(NACL_SDK_ROOT)を含む

CHROME_ARGS + = --allow-NaClのソケット-API = localhostを

LIBS = nacl_io ppapi_cpp PPAPI

を/tools/common.mk

CFLAGS = -Wall -g -O2 $(INCLUDES) -L ../../ツールチェーン/ mac_pnacl/le32-のNaClの/ usr/libに-lavformat \ -lvpx -lvorbisenc -lvorbis -logg -ltheoraenc -ltheoradec -logg -lmp3lame -lm -pthread -lavcodec -lvpx -lvorbisenc -lvorbis -logg \ -ltheoraenc -ltheoradec -logg -lmp3lame -lm -pthread -lswresample -lm -lavutil -lm -lavdevice -lavfilter

ソース= (OTHERDIR)/rtsp_response.cc/ $(OTHERDIR)/rtsp.cc $(OTHERDIR)/ rtsp_common。$(OTHERDIR)/tcp_util.cc $(OTHERDIR)/tpool.cc $(OTHERDIR)/net.cc $ cc \ $(OTHERDIR)/rtsp_client.cc $(OTHERDIR)/udp_util.cc\ $(OTHERDIR)/client.cc

common.mkからマクロによって生成されたの

#ビルドルール:

$(foreachののSRC、$(SOURCES)、$(エバール$($(CFLAGS)))、$(SRC)、 COMPILE_RULEを呼び出す)

#PNaClワークフローでは、ストライプ化されていないバイナリとファイナライズされた/ストリッピングされたバイナリの両方が使用されます。 #NaClでは、Release configs(デバッグではない)のストリップバイナリのみを生成します。 $(eval $( )LINK_RULE、$(TARGET)_unstripped、$(SOURCES)、$(TARGET)、$(TOOLCHAIN)、$ $ STRING_RULE、$(TARGET)、$(TARGET)_unstripped))else $(eval $( LINK_RULE、$(TARGET)、$(SOURCES )、$(LIBS)、$(DEPS)))endifの

$(のeval $(呼び出しNMF_RULEライブラリがされているか、$(TARGET)、))

そして、ここでの方法です、クラスのコンテキストで使用されます。

class VideoDecodePack { 
public: 
    VideoDecodePack() { 
     av_register_all(); 
    } 
}; 

class ClientInstance : public pp::Instance { 
public: 
    explicit ClientInstance(PP_Instance instance) : pp::Instance(instance){ 
    cses = InitRtspClientSession(); 
    _videoDecoder = new VideoDecodePack(); 
    } 
... 

答えて

0

この問題は、FFMPEGの追加ライブラリ(vpx、vorbis、lame)にリンクを追加することで解決しました。そして、リンクされたライブラリの順序を保つことは非常に重要です。

..... 
... 
TARGET = client 
INC_DIR := inc 

include $(NACL_SDK_ROOT)/tools/common.mk 

DEPS = ppapi_simple nacl_io 
LIBS = ppapi_simple nacl_io ppapi pthread \ 
avformat vpx vorbisenc vorbis ogg theoraenc \ 
theoradec mp3lame m avcodec swresample avutil \ 
avdevice avfilter 

OTHERDIR = src 

CFLAGS = -Wall 
# -I$(INC_DIR) 
SOURCES = $(OTHERDIR)/client.cc 

# Build rules generated by macros from common.mk: 

$(foreach dep,$(DEPS),$(eval $(call DEPEND_RULE,$(dep)))) 
$(foreach src,$(SOURCES),$(eval $(call COMPILE_RULE,$(src),$(CFLAGS)))) 
.... 
... 
関連する問題