I forgot to add my build script:
NDK=/cygdrive/c/Gabriel/Desenvolvimento/SDKs/Android/android-ndk-r4-
crystax
PLATFORM=$NDK/build/platforms/android-8/arch-arm/
PREBUILT=$NDK/build/prebuilt/windows/arm-eabi-4.4.0
function build_one
{
./configure --target-os=linux \
--prefix=$PREFIX \
--enable-cross-compile \
--extra-libs="-lgcc" \
--arch=arm \
--cc=$PREBUILT/bin/arm-eabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-eabi- \
--nm=$PREBUILT/bin/arm-eabi-nm \
--sysroot=$PLATFORM \
--extra-cflags=" -O2 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -
Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -
fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \
--disable-shared \
--enable-static \
--extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/
lib -nostdlib -lc -lm -ldl -llog" \
--disable-stripping \
--disable-debug \
--disable-symver \
--disable-ffprobe \
--disable-devices \
--disable-avfilter \
--disable-swscale \
--disable-ffplay \
--disable-ffserver \
--disable-network \
(many more ...)
--enable-asm \
$ADDITIONAL_CONFIGURE_FLAG
#make clean
make -j4 install
$PREBUILT/bin/arm-eabi-ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/arm-eabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/
usr/lib -soname libffmpeg.so -shared -nostdlib -z,noexecstack -
Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so
libavcodec/libavcodec.a libavformat/libavformat.a libavutil/
libavutil.a -lc -lm -lz -ldl -llog --warn-once --dynamic-linker=/
system/bin/linker $PREBUILT/lib/gcc/arm-eabi/4.4.0/libgcc.a
}
#arm v5
CPU=armv5te
OPTIMIZE_CFLAGS="-marm -march=$CPU"
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=
build_one
On Oct 16, 2:48 am, Gabriel Simões <[email protected]> wrote:
> I´ve spent many hours trying to figure out why I still get "undefined
> reference" when trying to link to ffmpeg. I´ve already read most of
> not all posts and sites about the subject, so I think I´m missing
> something little here and I hope you can help me.
>
> What I have:
>
> I´m using windows 7 + cygwin + crystax r4. I´ve compiled FFMPEG using
> RockPlayer's ffmpeg source plus some modifications I did (only to
> include / exclude demuxes, decoders, encoders, ...) After compiling, I
> get:
>
> a new folder named armv5te, which includes:
> a folder named "include" with all folders for each libs' .h
> a folder named "lib" which includes all libs' .a
> a shared library named libffmpeg.so (checked soname and it is
> libffmpeg)
> The shared library isn´t also placed on project/lib/armeabi/
> libffmpeg.so
>
> After compiling I tried to compile my project and link it. While
> my .cpp compiles ok, I get many undefined references.
>
> Here is my android.mk:
> --------------------------------------------------
> LOCAL_PATH := $(call my-dir)
> #declare the prebuilt library
> include $(CLEAR_VARS)
> LOCAL_MODULE := ffmpeg-prebuilt
> LOCAL_SRC_FILES := $(LOCAL_PATH)/ffmpeg/android/armv5te/libffmpeg.so
> LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/android/armv5te/
> include
> LOCAL_PRELINK_MODULE := true
> include $(PREBUILT_SHARED_LIBRARY)
>
> include $(CLEAR_VARS)
> LOCAL_MODULE := audiocodec
> LOCAL_SRC_FILES := ffmpeg_audio.cpp
> LOCAL_SHARED_LIBRARY := libffmpeg
> LOCAL_C_INCLUDES := $(LOCAL_PATH)/ffmpeg/android/armv5te/include
> LOCAL_LDLIBS := -llog -ljnigraphics -lz -lm $(LOCAL_PATH)/ffmpeg/
> android/armv5te/libffmpeg.so
> include $(BUILD_SHARED_LIBRARY)
> --------------------------------------------------
>
> The result:
> --------------------------------------------------
> Compile++ thumb: audiocodec <= /cygdrive/c/Gabriel/Desenvolvimento/
> Workspace/FFM
> PEG/jni/ffmpeg_audio.cpp
> SharedLibrary : libaudiocodec.so
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/obj/local/armeabi/
> objs/audi
> ocodec/ffmpeg_audio.o: In function
> `Java_gabriel_audioslower_pro_ffmpegDecoder_r
> eadSamples':
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:172: u
> ndefined reference to `avcodec_decode_audio3(AVCodecContext*, short*,
> int*, AVPa
> cket*)'
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:178: u
> ndefined reference to `av_read_frame(AVFormatContext*, AVPacket*)'
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/obj/local/armeabi/
> objs/audi
> ocodec/ffmpeg_audio.o: In function
> `Java_gabriel_audioslower_pro_ffmpegDecoder_s
> eekToPosMS':
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:147: u
> ndefined reference to `av_rescale_q(long long, AVRational,
> AVRational)'
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:150: u
> ndefined reference to `av_seek_frame(AVFormatContext*, int, long long,
> int)'
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:151: u
> ndefined reference to `avcodec_flush_buffers(AVCodecContext*)'
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:152: u
> ndefined reference to `av_read_frame(AVFormatContext*, AVPacket*)'
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/obj/local/armeabi/
> objs/audi
> ocodec/ffmpeg_audio.o: In function
> `Java_gabriel_audioslower_pro_ffmpegDecoder_c
> loseFile':
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:82: un
> defined reference to `avcodec_close(AVCodecContext*)'
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:83: un
> defined reference to `av_free(void*)'
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:84: un
> defined reference to `av_close_input_file(AVFormatContext*)'
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/obj/local/armeabi/
> objs/audi
> ocodec/ffmpeg_audio.o: In function
> `Java_gabriel_audioslower_pro_ffmpegDecoder_o
> penAudioFile':
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:37: un
> defined reference to `av_open_input_file(AVFormatContext**, char
> const*, AVInput
> Format*, int, AVFormatParameters*)'
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:44: un
> defined reference to `av_find_stream_info(AVFormatContext*)'
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:52: un
> defined reference to `avcodec_find_decoder(CodecID)'
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:60: un
> defined reference to `avcodec_open(AVCodecContext*, AVCodec*)'
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:67: un
> defined reference to `av_malloc(unsigned int)'
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:70: un
> defined reference to `av_read_frame(AVFormatContext*, AVPacket*)'
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/obj/local/armeabi/
> objs/audi
> ocodec/ffmpeg_audio.o: In function `JNI_OnLoad':
> /cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/jni/
> ffmpeg_audio.cpp:25: un
> defined reference to `av_register_all()'
> collect2: ld returned 1 exit status
> make: *** [/cygdrive/c/Gabriel/Desenvolvimento/Workspace/FFMPEG/obj/
> local/armeab
> i/libaudiocodec.so] Error 1
> --------------------------------------------------
>
> Something interesting is that some functions from ffmpeg, as
> av_register_all(), do now show up on the list of undefined references.
>
> Any ideas on what I can do to fix it? I´ve spent 3 days trying to make
> things work .. Thanks!
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en