I've got a project that is working fine in windows os but when I switched my laptop and opened an existing project in MacBook Pro M1. I'm unable to run an existing android project in MacBook pro M1. first I was getting
Execution failed for task ':app:kaptDevDebugKotlin'. > A failure
occurred while executing
org.jetbrains.kotlin.gradle.internal.KaptExecution >
java.lang.reflect.InvocationTargetException (no error message)
this error was due to the Room database I applied a fix that was adding below library before Room database and also changed my JDK location from file structure from JRE to JDK.
kapt "org.xerial:sqlite-jdbc:3.34.0"
//Room components
kapt "org.xerial:sqlite-jdbc:3.34.0"
implementation "androidx.room:room-ktx:$rootProject.roomVersion"
kapt "androidx.room:room-compiler:$rootProject.roomVersion"
androidTestImplementation "androidx.room:room-testing:$rootProject.roomVersion"
after that now I'm getting an issue which is Unknown host CPU architecture: arm64
there is an SDK in my project that is using this below line.
android {
externalNativeBuild {
ndkBuild {
path 'Android.mk'
}
}
ndkVersion '21.4.7075529'
}
App Gradle
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
version "3.18.1"
//version "3.10.2"
}
}
[CXX1405] error when building with ndkBuild using
/Users/mac/Desktop/Consumer-Android/ime/dictionaries/jnidictionaryv2/Android.mk:
Build command failed. Error while executing process
/Users/mac/Library/Android/sdk/ndk/21.4.7075529/ndk-build with
arguments {NDK_PROJECT_PATH=null
APP_BUILD_SCRIPT=/Users/mac/Desktop/Consumer-Android/ime/dictionaries/jnidictionaryv2/Android.mk
APP_ABI=arm64-v8a NDK_ALL_ABIS=arm64-v8a NDK_DEBUG=1
APP_PLATFORM=android-21
NDK_OUT=/Users/mac/Desktop/Consumer-Android/ime/dictionaries/jnidictionaryv2/build/intermediates/cxx/Debug/4k4s2lc6/obj
NDK_LIBS_OUT=/Users/mac/Desktop/Consumer-Android/ime/dictionaries/jnidictionaryv2/build/intermediates/cxx/Debug/4k4s2lc6/lib
APP_SHORT_COMMANDS=false LOCAL_SHORT_COMMANDS=false -B -n} ERROR:
Unknown host CPU architecture: arm64
which is causing this issue and whenever I comment on this line
path 'Android.mk'
it starts working fine, is there any way around which will help me run this project with this piece of code without getting this NDK issue?
Update - It seems that Room got fixed in the latest updates, Therefore you may consider updating Room to the latest version (2.3.0-alpha01 / 2.4.0-alpha03 or above)
use ndkVersion "24.0.8215888" update ndk to this version and no need to edit any script :)
GitHub Issue Tracker
solved this issue.
Finder -> Go To Folder(/Users/mac/Library/Android/sdk/ndk/21.4.7075529)
-> now edit ndk-build open it in text editor and paste below code script and re-run your project.
from
#!/bin/sh
DIR="$(cd "$(dirname "$0")" && pwd)"
$DIR/build/ndk-build "$#"
to
#!/bin/sh
DIR="$(cd "$(dirname "$0")" && pwd)"
arch -x86_64 /bin/bash $DIR/build/ndk-build "$#"
Reference Link
To solve this on a Apple Silicon M1 I found three options
A
Use NDK 24
android {
ndkVersion "24.0.8215888"
...
}
You can install it with
echo "y" | sudo ${ANDROID_HOME}/tools/bin/sdkmanager --install 'ndk;24.0.8215888'
or
echo "y" | sudo ${ANDROID_HOME}/sdk/cmdline-tools/latest/bin/sdkmanager --install 'ndk;24.0.8215888'
Depending what where sdkmanager is located
B
Change your ndk-build to use Rosetta x86. Search for your installed ndk with
find ~ -name ndk-build 2>/dev/null
eg
vi ~/Library/Android/sdk/ndk/22.1.7171670/ndk-build
and change
DIR="$(cd "$(dirname "$0")" && pwd)"
$DIR/build/ndk-build "$#"
to
DIR="$(cd "$(dirname "$0")" && pwd)"
arch -x86_64 /bin/bash $DIR/build/ndk-build "$#"
C
convert your ndk-build into a cmake build
Related
I have multiple dependencies for a piece of software. To make everything easier, we made CMake build files for these dependencies. For example, we have lo libfoo, so we make a folder called "make", and in there put the file "buildLibFoo.cmake", which looks like this:
include(ExternalProject)
externalproject_add(LIBFOO
URL https://github.com/lib/foo/archive/refs/tags/v1.6.0.tar.gz
URL_MD5 58e4e09322f2d1e417469eb0987f0531b
BUILD_IN_SOURCE 0
PREFIX ${CMAKE_BINARY_DIR}/deps/libfoo
SOURCE_DIR ${CMAKE_BINARY_DIR}/deps/libfoo/src/libfoo
CONFIGURE_COMMAND
cd <SOURCE_DIR> &&
autoreconf -i &&
./configure
BUILD_COMMAND
cd <SOURCE_DIR> &&
make -j$(nproc)
INSTALL_COMMAND ""
)
set(LIBFOO_INCLUDE_PATH ${CMAKE_BINARY_DIR}/deps/libfoo/src/libfoo/utils)
set(LIBFOO_LIB_PATH ${CMAKE_BINARY_DIR}/deps/libfoo/src/libfoo/utils/.libs)
In my primary CMakeFiles.cmake I add the following:
cmake_minimum_required(VERSION 3.18.1)
project("testproject")
set (COMPILE_FLAGS "-O2")
## Need LIBFOO
if(NOT (${LIBFOO_INCLUDE_PATH} AND ${LIBFOO_LIB_PATH}))
include(buildTSS.cmake)
include_directories(${LIBFOO_INCLUDE_PATH})
link_directories(${LIBFOO_LIB_PATH})
list(APPEND DEPENDENCY_LIST "LIBFOO")
endif()
add_library(
testproject
SHARED
testproject.cpp)
target_link_libraries(testproject libfoo)
add_dependencies(testproject ${DEPENDENCY_LIST})
While the compiles fine if I run cmake CMakeLists.txt and make, it fails to do so if I use Android Studio (with native code) or CLion. Here is an example in Android Studio.
Build command failed.
Error while executing process /home/derp/Android/Sdk/cmake/3.18.1/bin/ninja with arguments {-C /home/derp/AndroidStudioProjects/testproject/app/.cxx/Debug/565m494g/arm64-v8a testproject}
ninja: Entering directory `/home/derp/AndroidStudioProjects/testproject/app/.cxx/Debug/565m494g/arm64-v8a'
ninja: error: build.ninja:178: bad $-escape (literal $ must be written as $$)
Any ideas how to make it work through the IDE?
I ran into this same error for an existing project I was trying to load with CLion that also built fine using cmake from the command line.
In my case the solution was to override the default setting CLion uses for the generator tool (ninja) and set it to the "Let CMake decide"
I'm using CMake with Visual Studio 2019 to build an executable with the gcc compiler from a small C-program by using an Ubuntu in a Docker container. My problem is now, that I don't get an executable although I don't get any error during the building process.
A manual build on the command line with gcc -o CMakeExec CMakeExec.c works correct.
Here is my config:
CMakeExec.h
#pragma once
#include <stdio.h>
CMakeExec.c
#include "CMakeExec.h"
int main()
{
printf("This is a test!");
return 0;
}
First CMakeList.txt
cmake_minimum_required (VERSION 3.8)
add_executable (CMakeExec "CMakeExec.c" "CMakeExec.h")
Second CMakeList.txt
cmake_minimum_required (VERSION 3.8)
project ("CMakeExec")
add_subdirectory ("CMakeExec")
CMakeSettings.json
{
"name": "Linux-GCC-Debug",
"generator": "Ninja",
"configurationType": "Debug",
"cmakeExecutable": "cmake",
"remoteCopySourcesExclusionList": [ ".vs", ".git", "out" ],
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "linux_x64" ],
"remoteMachineName": "-970746741;localhost (username=test, port=5000, authentication=Password)",
"remoteCMakeListsRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/src",
"remoteBuildRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/build/${name}",
"remoteInstallRoot": "$HOME/.vs/${projectDirName}/${workspaceHash}/out/install/${name}",
"remoteCopySources": true,
"rsyncCommandArgs": "-t --delete --delete-excluded",
"remoteCopyBuildOutput": false,
"remoteCopySourcesMethod": "rsync",
"addressSanitizerRuntimeFlags": "detect_leaks=0",
"variables": []
}
Dockerfile
# our local base image
FROM ubuntu
LABEL description="Container for use with Visual Studio"
# install build dependencies
RUN apt-get update && apt-get install -y g++ rsync zip openssh-server make
# configure SSH for communication with Visual Studio
RUN mkdir -p /var/run/sshd
RUN echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config && \
ssh-keygen -A
# expose port 22
EXPOSE 22
Output from the Visual Studio
Copying files to the remote machine.
Starting copying files to remote machine.
[rsync] rsync -t --delete --delete-excluded -v -r --exclude=.vs --exclude=.git --exclude=out -8 "." rsync://test#localhost:51754/-home-test-.vs-CMakeExec-369e0150-0280-45f1-b4c9-244852742d47-src
[rsync] sending incremental file list
[rsync] CMakeSettings.json
[rsync]
[rsync] sent 291 bytes received 54 bytes 690.00 bytes/sec
[rsync] total size is 2,765 speedup is 8.01
Finished copying files (elapsed time 00h:00m:02s:371ms).
CMake generation started for configuration: 'Linux-GCC-Debug'.
Found cmake executable at /usr/bin/cmake.
/usr/bin/cmake -G "Ninja" -DCMAKE_BUILD_TYPE:STRING="Debug" -DCMAKE_INSTALL_PREFIX:PATH="$HOME/.vs/CMakeExec/369e0150-0280-45f1-b4c9-244852742d47/out/install/Linux-GCC-Debug" "/home/test/.vs/CMakeExec/369e0150-0280-45f1-b4c9-244852742d47/src/CMakeLists.txt";
[CMake] -- Configuring done
[CMake] -- Generating done
[CMake] -- Build files have been written to: /home/test/.vs/CMakeExec/369e0150-0280-45f1-b4c9-244852742d47/out/build/Linux-GCC-Debug
Extracted CMake variables.
Extracted source files and headers.
Extracted code model.
Extracted includes paths.
CMake generation finished.
I hope that anyone has an idea what is missing.
I have to populate the CMake variable cache from a file.
I added an argument to defaultConfig.externalNativeBuild.cmake.arguments (-C options.cmake).
However, I get this:
17:05:13.520 [LIFECYCLE] [org.gradle.api.Project] loading initial
cache file options.cmake 17:05:13.521 [LIFECYCLE]
[org.gradle.api.Project] CMake Error: Error processing file:
options.cmake
The file is in the same directory as the build.gradle.
I tried providing the absolute path (with the help of projectDir variable), but it didn't change anything.
Simple reproduction
Create an empty Android app in Android Studio.
In MyApplication/app add a simple CMakeLists.txt file:
cmake_minimum_required(VERSION 3.0)
project(hello)
In the same folder add a simple options.cmake file:
set(foo "bar")
Note that this is OK for CMake:
cd MyApplication/app && mkdir bld && cd bld
cmake -C ../options.cmake ..
Now, import the CMakeLists.txt with right-click on the project and 'Link C++ Project with Gradle'
Your build.gradle should now have this:
externalNativeBuild {
cmake {
path 'CMakeLists.txt'
}
}
What I tried doing now was adding the following in defaultConfig:
externalNativeBuild {
cmake {
arguments "-C ${projectDir}/options.cmake"
}
}
But this doesn't work. Any other ideas for populating CMake cache?
It turned out to be quite easy:
Don't put space after "-C"
I am unable to build a NDK project from the Android Studio environment but can build it manually using the command console.
I get the following error after building:
Error:Execution failed for task ':xxxxxx:compileReleaseNdk'.> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Users\xxxxx\AppData\Local\Android\SDK\android-sdk\ndk-bundle\ndk-build.cmd'' finished with non-zero exit value 2
I got a similar error while invoking ndk-build.cmd manually using the console from the jni directory where my NDK project is stored.However I fixed it by modifying the following in my Application.mk file as follows:
NDK_TOOLCHAIN_VERSION := 4.9
since 4.9 is the tool chain available on my install. I suspect from the Android Studio environment, the toolchain version is being picked incorrectly, and yet I do not know where to set this option in the GUI.
The build.gradle file has the following NDK block:
ndk{
moduleName "xxxxxx"
ldLibs "log"
cFlags "-std=c++11 -fexceptions"
stl "gnustl_static"
abiFilters "arm64-v8a armeabi armeabi-v7a mips mips64 x86 x86_64"
}
Please advise me on how to go about solving this problem.
Just out of curiosity, I moved my project directory to the desktop and tried to build that project. The build was successful.
Finally narrowed down the problem to the NDK compiler not being able to create the following intermediate object file inside my project folder:
C:\Users\xxxxx\GitRepos\REVIEWS\xxx\SMART-xxx\xxxx-xxx-androidnative\xxxLibraries\xxxlibrary\build\intermediates\ndk\debug\obj/local/arm64-v8a/objs/natXXXX/C_\Users\xxxxx\GitRepos\REVIEWS\xxx\SMART-xxxx\xxxx-xxx-androidnative\xxxLibraries\xxxlibrary\src\main\jni\NativeXXXX.o.d
The reason was the well known windows path cannot exceed 255 characters issue. As you can see above the NDK-Build utility tries to append a deep folder hierarchy like "C_\Users\xxxxx\GitRepos\REVIEWS\xxx\SMART-xxxx\xxxx-xxx-androidnative\xxxLibraries\xxxlibrary\src\main\jni\" which exceeds MAX_PATH.
I'm trying to cross-compile GStreamer. Version is 1.2.3. Host PC's OS is x86 linux and Target system's OS is MIPSEL linux OS.
I succeeded to compile gstreamer and plugins for target device. And gst-launch-1.0 could be executed. So I tried to use basic plugin, libgstvideotestsrc. But it didn't work. So I ran ```gst-inspect-1.0' to inspect plugins then I found the result like below.
# gst-inspect-1.0 -b
Blacklisted files:
libgstinterlace.so
libgstfbdevsink.so
libgstgeometrictransform.so
libgstmultifile.so
libgstencodebin.so
libgstfestival.so
libgstlevel.so
libgstdvdspu.so
libgstauparse.so
libgsty4menc.so
libgstvideofilter.so
libgstvideoscale.so
libgstaccurip.so
libgstvideoconvert.so
libgstaudioparsers.so
libgsttcp.so
libgstvolume.so
libgstcoreelements.so
libgstmpegtsdemux.so
libgstid3tag.so
libgstadpcmdec.so
libgstmfc.so
libgstrtpmanager.so
libgstaudiotestsrc.so
libgstdeinterlace.so
libgstdebug.so
libgstplayback.so
libgstspeed.so
libgstasfmux.so
libgsticydemux.so
libgstmpegpsdemux.so
libgstalaw.so
libgstwavparse.so
libgstpnm.so
libgstnavigationtest.so
libgstcamerabin2.so
libgstsdpelem.so
libgstisomp4.so
libgstliveadder.so
libgstmpegtsmux.so
libgstautodetect.so
libgstmultipart.so
libgstvideofiltersbad.so
libgstaudioresample.so
libgstautoconvert.so
libgstdvbsuboverlay.so
libgstid3demux.so
libgstvideobox.so
libgstgio.so
libgstdtmf.so
libgstremovesilence.so
libgstreplaygain.so
libgstaudioconvert.so
libgstcutter.so
libgstgaudieffects.so
libgstdvb.so
libgstaudiovisualizers.so
libgstudp.so
libgstimagefreeze.so
libgstadder.so
libgstpcapparse.so
libgstmxf.so
libgstshapewipe.so
libgstgdp.so
libgstwavenc.so
libgstshm.so
libgstflv.so
libgstfreeverb.so
libgstoss4audio.so
libgstsubenc.so
libgstaudiorate.so
libgstinter.so
libgsttypefindfunctions.so
libgstvideorate.so
libgstrtp.so
libgstcoloreffects.so
libgstmpegpsmux.so
libgstivtc.so
libgstjpegformat.so
libgstsmpte.so
libgstalphacolor.so
libgstsubparse.so
libgstaudiofxbad.so
libgstvideomixer.so
libgstmulaw.so
libgstdebugutilsbad.so
libgsteffectv.so
libgstfieldanalysis.so
libgstadpcmenc.so
libgstrawparse.so
libgstavi.so
libgstdataurisrc.so
libgstapetag.so
libgstinterleave.so
libgstmidi.so
libgstrtsp.so
libgstapp.so
libgstalpha.so
libgstaudiofx.so
libgstvideocrop.so
libgstvideotestsrc.so
libgstspectrum.so
libgstbayer.so
libgstaiff.so
libgstsegmentclip.so
libgstfrei0r.so
Total count: 106 blacklisted files
I wonder the meaning of 'blacklisted' and how I should approach this problem. Please let me know if you need several information to resolve this issue.
Here is my build configuration for GStreamer.
#PACKAGES: Name + version
export GST_PLUGIN_BASE="gst-plugins-base-1.2.3"
export GST_PLUGIN_GOOD="gst-plugins-good-1.2.3"
export GST_PLUGIN_BAD="gst-plugins-bad-1.2.3"
#HOST & Build configuration.
export HOST="mips-linux-gnu"
export BUILD="i686-pc-linux-gnu"
#Set path for file system.
export BUILD_PATH="~~~~~"
export ROOTFS_PATH="${BUILD_PATH}/rootfs"
export MIPS_LIB="~~~"
export INSTALL_PATH="${ROOTFS_PATH}/usr"
export INSTALL_PATH_LIB="${ROOTFS_PATH}/usr/lib"
#Compiler options
export PATH="${PATH}:${INSTALL_PATH}/bin"
export CFLAGS="-I${ROOTFS_PATH}/usr/include -I${ROOTFS_PATH}/usr/include/glib-2.0 -I${ROOTFS_PATH}/usr/lib/glib-2.0/include -I${ROOTFS_PATH}/usr/include/gstreamer-1.0 -I${ROOTFS_PATH}/usr/include/gio-unix-2.0 -mno-compact-eh -EL"
export CPPFLAGS="-I${ROOTFS_PATH}/usr/include -I${ROOTFS_PATH}/usr/include/glib-2.0 -I${ROOTFS_PATH}/usr/lib/glib-2.0/include -I${ROOTFS_PATH}/usr/include/gstreamer-1.0 -I${ROOTFS_PATH}/usr/include/gio-unix-2.0 -mno-compact-eh -EL"
export CXXFLAGS=$CPPFLAGS
export GST_CHECK_CFLAGS="-I${ROOTFS_PATH}/usr/include -I${ROOTFS_PATH}/usr/include/glib-2.0/include"
export PKG_CONFIG="/usr/bin/pkg-config"
export PKG_CONFIG_PATH="${PATH}:${ROOTFS_PATH}/lib/pkgconfig/:${ROOTFS_PATH}/usr/lib/pkgconfig/:${ROOTFS_PATH}/usr/local/lib/pkgconfig/:/usr/lib/pkgconfig:/usr/local/lib/pkgconfig:/lib/pkgconfig"
export LD_LIBRARY_PATH="/lib:/usr/local/lib"
export CC="~~~mips-linux-gnu-gcc -EL"
export CXX="~~~mips-linux-gnu-g++ -EL"
cd ${BUILD_PATH}
#GStreamer 1.2.3
#http://greenday96.egloos.com/viewer/4627046
wget http://gstreamer.freedesktop.org/src/gstreamer/$GSTREAMER.tar.xz
tar xf $GSTREAMER.tar.xz
cd $GSTREAMER
./configure --prefix=$INSTALL_PATH --build=$BUILD --host=$HOST --disable-nls --disable-static
sudo make
sudo make install
cd ..
#gst-plugin-base 1.2.3
wget http://gstreamer.freedesktop.org/src/gst-plugins-base/$GST_PLUGIN_BASE.tar.xz
tar xf $GST_PLUGIN_BASE.tar.xz
cd $GST_PLUGIN_BASE
./configure --prefix=$INSTALL_PATH --build=$BUILD --host=$HOST --disable-nls --disable-static --disable-examples --disable-pango
sudo make
sudo make install
cd ..
# gst-plugin-good-1.2.3
# http://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.2.3.tar.xz
wget http://gstreamer.freedesktop.org/src/gst-plugins-good/$GST_PLUGIN_GOOD.tar.xz
tar xf $GST_PLUGIN_GOOD.tar.xz
cd $GST_PLUGIN_GOOD
./configure --prefix=$INSTALL_PATH --build=$BUILD --host=$HOST --disable-nls --disable-static --disable-valgrind --disable-equalizer --disable-flx --disable-goom --disable-goom2k1 --disable-matroska --disable-monoscope --disable-oss --disable-cairo --disable-gdk_pixbuf --disable-soup --disable-libpng --disable-gst_v4l2
sudo make
sudo make install
cd ..
# gst-plugin-bad-1.2.3
# http://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-1.2.3.tar.xz
wget http://gstreamer.freedesktop.org/src/gst-plugins-bad/$GST_PLUGIN_BAD.tar.xz
tar xf $GST_PLUGIN_BAD.tar.xz
cd $GST_PLUGIN_BAD
./configure --prefix=$INSTALL_PATH --build=$BUILD --host=$HOST --disable-nls --disable-static --disable-y4m --disable-siren --disable-librfb --disable-yadif --disable-smooth --disable-videoparsers --disable-decklink --disable-valgrind --disable-directfb --disable-examples
sudo make
sudo make install
cd ..
if you want to know for sure why these plugins are blacklisted, you can remove "registry.dat" (run locate to find out its location), then rerun gst-inspect , the plugins will be examined once again and the reason for blacklisting them should be printed.
There can be several reasons why they are blacklisted, if you do this you should find them out.
Alternatively, you can also run gst-inspect location_of_the_dynamic_library.so
For gstreamer 1.8 gst-inspect-1.0 need to be launcged with additional GST_DEBUG=4 env var to view detailed reason (incompatible version in my case):
GST_DEBUG=4 gst-inspect-1.0 /usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgst_some_plugin.so
...15-20 lines with non-interesting details...
0:00:00.035553207 4287 0x29f93c00 WARN GST_PLUGIN_LOADING gstplugin.c:485:gst_plugin_register_func: plugin "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgst_some_plugin.so" has incompatible version (plugin: 1.10, gst: 1,8), not loading
Could not load plugin file: File "/usr/lib/aarch64-linux-gnu/gstreamer-1.0/libgst_some_plugin.so" appears to be a GStreamer plugin, but it failed to initialize
In my case it was blacklisted as I have built kvssink which have dependencies on other libraries. And GStreamer doesn't found them.
It was like that:
gst-inspect-1.0 kvssink
(gst-plugin-scanner:22): GStreamer-WARNING **: 13:07:28.097: Failed to load plugin '/root/bin/producer/libgstkvssink.so': libproducer.so: cannot open shared object file: No such file or directory
(gst-plugin-scanner:22): GStreamer-WARNING **: 13:07:28.204: Failed to load plugin '/root/bin/producer/libproducer.so': libcproducer.so: cannot open shared object file: No such file or directory
To confirm libraries issue I've used ldd
ldd libgstkvssink.so
Which will list all dependencies with paths were they may be found in system.
my libraries libcproducer.so and libcproducer.so were not found.
Based on path pritned for other visible libraries
linux-vdso.so.1 (0x00007ffc3c1a6000)
libgstreamer-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0 (0x00007f064d24d000)
I just copied missing libraries to /usr/lib/x86_64-linux-gnu/
In my case it was:
cp libcproducer.so /usr/lib/x86_64-linux-gnu/
cp libproducer.so /usr/lib/x86_64-linux-gnu/
And than:
gst-inspect-1.0 kvssink
prints plugin details.
I've resolved that thanks to information in this thread:
Linking against external libraries in gstreamer plugin using autotools
I found the reason. It's GLIB, not GStreamer.
To build GLIB for mipsel, I should set glib_cv_uscore=no. It's up to your embedded device. So please check your target hardware's CPU specification. So I made the build script for GLIB like below.
#Glib 2.42.1
wget ftp://ftp.gnome.org/pub/gnome/sources/glib/2.42/$GLIB.tar.xz
tar xf $GLIB.tar.xz
cd $GLIB
#Build for MIPS
echo "ac_cv_func_posix_getgrgid_r=yes" > mips.cache
echo "ac_cv_func_posix_getpwuid_r=yes" >> mips.cache
echo "glib_cv_stack_grows=no" >> mips.cache
echo "glib_cv_uscore=no" >>mips.cache
./configure --prefix=$INSTALL_PATH --host=$HOST --cache-file=mips.cache --build=$BUILD
make
make install
cd ..
I got the clue from here.