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.
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'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
I am trying to cross compile PostgreSQL on an x86 host for an AArch64 target, and want to compile with OpenSSL support.
I already went ahead and successfully cross compiled OpenSSL for AArch64 using the following arguments:
../Configure linux-aarch64 --prefix=$(pwd)/packaged no-dso --cross-compile-prefix="/usr/bin/aarch64-linux-gnu-"
make -j$(nproc)
make -j$(nproc) install
Now on to cross compiling PostgreSQL, I am using the following build script:
test -e postgresql-12.2.tar.gz || wget https://ftp.postgresql.org/pub/source/v12.2/postgresql-12.2.tar.gz
test -e postgresql-12.2 || tar -xzvf postgresql-12.2.tar.gz
cd postgresql-12.2
test -e build_aarch64 && rm -rf build_aarch64
mkdir build_aarch64
cd build_aarch64
../configure --host=aarch64-linux-gnu --without-readline --without-zlib CFLAGS="-O3 -fPIC" CXXFLAGS="-fPIC" CPPFLAGS="-fPIC" --prefix=$PWD/packaged USE_DEV_URANDOM=1 --with-openssl --with-libraries=../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/lib/ --with-includes=../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/include/
make -j$(nproc)
The output of the configure commands shows that the include directory has been properly set:
configure: using CPPFLAGS=-fPIC -D_GNU_SOURCE -I../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/include/
configure: using LDFLAGS= -L../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/lib/
Running the make command fails on:
/usr/include/openssl/e_os2.h:13:11: fatal error: openssl/opensslconf.h: No such file or directory
13 | # include <openssl/opensslconf.h>
However if I run find ../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/include/ | grep opensslconf.h it outputs:
../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/include/openssl/opensslconf.h
so the file is definitely there in the include paths. Is this a bug? Am I doing something incorrectly?
Figured it out, looks like I had to use absolute paths instead of relative paths for the search directories:
../configure --host=aarch64-linux-gnu --without-readline --without-zlib CFLAGS="-O3 -fPIC" CXXFLAGS="-fPIC" CPPFLAGS="-fPIC" --prefix=$PWD/packaged USE_DEV_URANDOM=1 --with-openssl --with-libraries=$(pwd)/../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/lib/ --with-includes=$(pwd)/../../openssl-OpenSSL_1_1_1k/build_aarch64/packaged/include/
So basically just added $(pwd)/ to the start of the search directory paths.
I'm trying to use rug, so I copied rug = "1.11.0" to my Cargo.toml file under [dependencies]. But I got an error: failed to run custom build command for gmp-mpfr-sys v1.4.0.
I do not get any errors with other dependencies, why does this error occur and how can I fix it?
I'm using Windows 10.
The entire error message:
error: failed to run custom build command for gmp-mpfr-sys v1.4.0
Caused by:
process didn't exit successfully: C:\Users\kimchi\OneDrive\Desktop\Rust\target\debug\build\gmp-mpfr-sys-9f6df87a2d8ae0bb\build-script-build (exit code: 101)
--- stdout
cargo:rerun-if-env-changed=GMP_MPFR_SYS_CACHE
$ mkdir -p "C:\Users\kimchi\OneDrive\Desktop\Rust\target\debug\build\gmp-mpfr-sys-dcad4e240d8aac65\out\try_external_doc"
$ cd "C:\Users\kimchi\OneDrive\Desktop\Rust\target\debug\build\gmp-mpfr-sys-dcad4e240d8aac65\out\try_external_doc"
$ printf '%s' "// try_ext"... > "C:\Users\kimchi\OneDrive\Desktop\Rust\target\debug\build\gmp-mpfr-sys-dcad4e240d8aac65\out\try_external_doc\try_external_doc.rs"
$ "rustc" "try_external_doc.rs" "--emit=dep-info,metadata" >& /dev/null
$ printf '%s' "#![feature"... > "C:\Users\kimchi\OneDrive\Desktop\Rust\target\debug\build\gmp-mpfr-sys-dcad4e240d8aac65\out\try_external_doc\try_external_doc.rs"
$ "rustc" "try_external_doc.rs" "--emit=dep-info,metadata" >& /dev/null
$ rm -r "C:\Users\kimchi\OneDrive\Desktop\Rust\target\debug\build\gmp-mpfr-sys-dcad4e240d8aac65\out\try_external_doc"
$ mkdir -p "C:\Users\kimchi\OneDrive\Desktop\Rust\lab1b\target\debug\build\gmp-mpfr-sys-dcad4e240d8aac65\out\lib"
$ mkdir -p "C:\Users\kimchi\OneDrive\Desktop\Rust\target\debug\build\gmp-mpfr-sys-dcad4e240d8aac65\out\include"
--- stderr
thread 'main' panicked at 'Windows MSVC target is not supported (linking would fail)', C:\Users\kimchi.cargo\registry\src\github.com-1ecc6299db9ec823\gmp-mpfr-sys-1.4.0\build.rs:951:9
note: run with RUST_BACKTRACE=1 environment variable to display a backtrace
gmp-mpfr-sys is not available on Windows when you use the default MSVC compiler backend (see Windows MSVC target is not supported (linking would fail) in the panic message).
You need to install MSYS2 first.
Then, in MSYS2 install necessary packages:
pacman -S pacman-mirrors
pacman -S diffutils make mingw-w64-x86_64-gcc
Build your crate inside of MSYS2 environment with cargo.
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.