无法为Android教程构建GStreamer

时间:2013-02-13 20:46:44

标签: android android-ndk gstreamer

我遇到了许多试图构建GStreamer Android教程的问题。

我的环境是:

  • Mac OS X 7
  • Android SDK版本17
  • Android NDK 8d

我能够在Eclipse和命令行中构建和运行NDK示例。

我已下载http://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-debug-2012.11.tar.bz2并将GSTREAMER_SDK_ROOT_ANDROID环境变量添加到我的.bash_profile。

当我尝试通过Eclipse构建android-tutorial-1时,我收到以下错误:

12:12:05 **** Incremental Build of configuration Default for project Tutorial1 ****
/apps/tools/android-ndk-r8d/ndk-build all 
jni/Android.mk:13: *** GSTREAMER_SDK_ROOT_ANDROID is not defined!.  Stop.

12:12:05 Build Finished (took 104ms)

我已经尝试将GSTREAMER_SDK_ROOT_ANDROID添加到Eclispe中的C ++构建变量中,但它没有区别。

当我尝试通过命令行构建时,我收到以下错误:

/bin/sh: pkg-config: command not found
/bin/sh: pkg-config: command not found
/bin/sh: pkg-config: command not found
GStreamer      : [GEN] => gst-build/gstreamer_android.c
GStreamer      : [COMPILE] => gst-build/gstreamer_android.c
gst-build/gstreamer_android.c:2:21: fatal error: gst/gst.h: No such file or directory
compilation terminated.
make: *** [gst-build/gstreamer_android.o] Error 1

我无法弄清楚gst / gst.h无法解决?

6 个答案:

答案 0 :(得分:9)

在这里你遇到了两个问题

1。未定义GSTREAMER_SDK_ROOT_ANDROID

可以通过设置GSTREAMER_SDK_ROOT_ANDROID环境变量(在eclipse或Android.mk文件中)轻松解决,在我的情况下,我已经像这样指定了这个变量

GSTREAMER_VERSION   := 1.4.1
GSTREAMER_SDK_ROOT  := /Volumes/Data/Developers/Library/gstreamer-1.0-sdk-android/$(TARGET_ARCH_ABI)-$(APP_OPTIM)-$(GSTREAMER_VERSION)
  1. TARGET_ARCH_ABI - 预定义变量(在我的情况下为armeabi-v7a
  2. APP_OPTIM - 预定义变量releasedebug
  3. 在您的情况下,GSTREAMER_SDK_ROOT当然会有所不同,但如果您需要支持多个拱门,使用预定义的变量可以提供很多帮助

    2。您的pkg-confing不在PATH

    正如您在默认情况下所看到的,使用sh shell

    /bin/sh: pkg-config: command not found
    /bin/sh: pkg-config: command not found
    /bin/sh: pkg-config: command not found
    

    找不到pkg-config,因为最初PATH=/usr/bin:/bin:/usr/sbin:/sbin。如果您在OSX上按pkg-config安装brew,则会将其放置到/usr/local/bin

    bash-3.2$ which pkg-config
    /usr/local/bin/pkg-config
    

    要修复PATH,您可以指定自己的shell

    SHELL := PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin /bin/bash
    

    这不是完美的解决方案,但它有效

    Gradle用户更新

    由于2.2.0-alpha3 gradle android插件支持这样的外部构建系统(在build.gradleandroid定义中添加)

    android { 
        ...
        externalNativeBuild {
            ndkBuild {
                path "${projectDir.absolutePath}/src/main/jni/Android.mk"
            }
        }
    }
    

    不要忘记清理jni.srcDirs因为错误的插件会先启动,要在运行时清除jni.srcDirs添加

    android { 
        ...
        task disableDefaultNdkBuild << {
            android.sourceSets.main.jni.srcDirs = []
            android.sourceSets.main.jniLibs.srcDir 'src/main/libs'
        }
    
        preBuild.dependsOn disableDefaultNdkBuild
    }
    

    现已提供官方指南https://gstreamer.freedesktop.org/documentation/tutorials/android/link-against-gstreamer.html

答案 1 :(得分:5)

我在GStreamer Android邮件列表上发布了上述问题,得到了以下回复:

  

您好,   很抱歉,我们忘记在此版本中为Mac OS X添加pkg-config。   你可以在这里下载:   http://macpkg.sourceforge.net/

我使用自制软件来安装pkg-config,并且可以使用ndk-build通过命令行构建所有Android教程。

我在Eclipse中仍有许多问题:

  1. * GSTREAMER_SDK_ROOT_ANDROID未定义! - 我无法让Eclipse接收这个变量
  2. 如果我将变量硬编码到make文件中,那么我会得到/bin/sh: pkg-config: command not found - pkg-config已经安装并通过CLI工作
  3. 我认为其中一些问题与Android Issue 33788有关,我尝试使用CDT 8.0.2而不是CDT 8.10来解决它们,但它没有解决上述任何一个问题。

    我现在通过以下方式解决了这个问题:

    1. 为我的项目禁用CDT构建
    2. 使用CLI ndk-build
    3. 构建NDK代码
    4. 正常通过Eclipse构建和部署应用程序

答案 2 :(得分:4)

表示错误1: jni / Android.mk:13: * GSTREAMER_SDK_ROOT_ANDROID未定义!停止。

您可以在Android.mk文件中定义GSTREAMER_SDK_ROOT_ANDROID:= XXXXX(您的Gstreamer_Android_SDK路径)!

表示错误2: 致命错误:gst / gst.h:没有这样的文件或目录

你可以在C / C ++ General中包含(Gstreamer_Android_SDK Path)/include/gstreamer0.10/ - &gt;路径和符号 - &gt;包括!

希望这会有所帮助:)

答案 3 :(得分:0)

我在Eclipse中使用ADT,也许您可​​以通过以下步骤将GSTREAMER_SDK_ROOT_ANDROID定义为项目环境变量:

Project -> Properties -> C/C++ Build -> Environment -> Add

而不是在.mk文件中定义它。

答案 4 :(得分:0)

我遇到了同样的问题,但在互联网上一无所获。但不知何故,对这个问题的详细研究使我解决了这个问题。

要解决此问题,您需要在eclipse中执行以下步骤:

     
  1. 转到Windows->preferences->c/c++->build->Environment
  2.  
  3. 点击窗口最右侧的Add按钮
  4.  
  5. 在名称字段中输入“GSTREAMER_SDK_ROOT_ANDROID
  6.  
  7. Value字段中输入GStreamer SDK的位置。就我而言,它是“C:\GStreamer_SDK”。这里是问题....你需要使用正斜杠“/”而不是向后“\”才能使其正常工作。所以我的Gstreamer SDK位置看起来像这个“C:/GStreamer_SDK
  8. 完成后。您需要在项目的Android.mk文件中进行一些更改。

    转到以下行

    GSTREAMER_NDK_BUILD_PATH  := $(GSTREAMER_SDK_ROOT)/share/gst-android/ndk-build/
    

    并从代码行中删除结束正斜杠。所以它会像这样。

    GSTREAMER_NDK_BUILD_PATH  := $(GSTREAMER_SDK_ROOT)/share/gst-android/ndk-build
    

    保存它,你就完成了它!

    如果你没有删除斜杠,它将在构建过程中生成路径

    c:/GStreamer_SDK/share/gst-android/ndk-build//gstreamer.mk
    

    构建过程中出现双斜线问题。

    现在右键点击project->clean Project

    现在通过右键单击project->build项目来构建它。

    如果eclipse在构建时挂起,只需转到任务管理器并两次终止make.exe服务。

    在您的设备或模拟器上运行您的项目。 玩得开心!

答案 5 :(得分:0)

@CAMOBAP感谢您的帖子。这对我很有帮助。我可以在eclipse中构建Android示例。主要问题是:

SHELL := PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin /bin/bash

Fo GSTREAMER_SDK_ROOT_ANDROID

  1. 右键单击Project-&gt; Properties-&gt; C / C ++ Build-&gt; Environment 添加 - &GT;名称:GSTREAMER_SDK_ROOT_ANDROID 价值:/Users/Your/Path/To/gstreamer-sdk-android-arm-release-2013.6 也可以为Build Variables添加它。
  2. 下一步:您不必从MAC中的代码行中删除结束正斜杠,并且您不必在Eclipse中添加包含。首次构建后,这些依赖项将自动解决。 确保您的Android SDK和NDK在Eclipse中运行良好。我还将SDK和NDK路径添加到:

    nano .bash_profile
    

    这是在MAC上运行的。我还将Manifest文件更改为:

        android:minSdkVersion="xx"
        android:targetSdkVersion="xx" />
    

    对于Android Gstreamer的教程5,您需要添加SD卡权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />