7

我在尝试构建 GStreamer Android 教程时遇到了许多问题。

我的环境是:

  • Mac OS X 7
  • 安卓 SDK 版本 17
  • 安卓 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 无法解决?

4

6 回答 6

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

在您的情况下GSTREAMER_SDK_ROOT当然会有所不同,但是如果您需要支持多个拱门,使用预定义的变量会很有帮助

2.你pkg-confing不在PATH

正如您所看到的,默认情况下使用shshell

/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-configbrew它已被放置到/usr/local/bin

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

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

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

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

Gradle 用户更新

由于2.2.0-alpha3gradle android 插件支持这样的外部构建系统(将其添加到build.gradle内部android定义中)

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

于 2014-10-02T10:10:50.543 回答
5

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

嗨,很遗憾,我们忘记包含pkg-config在 Mac OS X 的这个版本中。你可以从这里下载它:http: //macpkg.sourceforge.net/

我使用自制软件进行安装pkg-config,并且能够通过命令行使用ndk-build.

我在 Eclipse 中仍然存在许多问题:

  1. * GSTREAMER_SDK_ROOT_ANDROID未定义!- 我无法让 Eclipse 获取此变量
  2. 如果我将变量硬编码到 make 文件中,我会得到/bin/sh: pkg-config: command not found- pkg-config 已安装并通过 CLI 工作

我相信其中一些问题与 Android问题 33788有关,我尝试使用 CDT 8.0.2 而不是 CDT 8.10 来解决它们,但它没有解决上述任何一个问题。

我现在通过执行以下操作解决了这个问题:

  1. 为我的项目禁用 CDT 构建
  2. 使用 CLI ndk-build 构建 NDK 代码
  3. 像往常一样通过 Eclipse 构建应用程序并将其部署到我的设备
于 2013-02-25T22:04:54.740 回答
4

对于 error1: jni/Android.mk:13: * GSTREAMER_SDK_ROOT_ANDROID 未定义!。停止。

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

对于error2:致命错误:gst/gst.h:没有这样的文件或目录

您可以在 C/C++ General -> Paths and Symbols -> inlude 中包含 (Gstreamer_Android_SDK Path)/include/gstreamer0.10/!

希望这会有所帮助:)

于 2013-07-02T03:30:43.170 回答
0

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

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

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

于 2014-02-26T10:25:12.667 回答
0

我面临同样的问题,但在互联网上没有发现任何问题。但不知何故,对这个问题的详细研究让我解决了这个问题。

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

  1. Windows->preferences->c/c++->build->Environment
  2. 单击Add窗口最右侧的按钮
  3. 在名称字段中输入“ GSTREAMER_SDK_ROOT_ANDROID
  4. 在该Value字段中输入 GStreamer SDK 的位置。就我而言,它是“ C:\GStreamer_SDK”。这是问题...。您需要使用正斜杠“ /”而不是反斜杠“ \”才能使其正常工作。所以我的 Gstreamer SDK 位置看起来像这样“ C:/GStreamer_SDK

一旦你完成了它。您需要对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->build项目来构建它。

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

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

于 2014-05-16T00:09:34.543 回答
0

@CAMOBAP 谢谢你的帖子。它真的对我有帮助。我可以在 Eclipse 中构建 Android 示例。主要问题是:

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

对于 GSTREAMER_SDK_ROOT_ANDROID

  1. 右键单击 Project->Properties->C/C++ Build->Environment Add-> 名称:GSTREAMER_SDK_ROOT_ANDROID 值:/Users/Your/Path/To/gstreamer-sdk-android-arm-release-2013.6 也为构建变量添加它.

下一步:您不必从 MAC 中的代码行中删除结尾的正斜杠,也不必在 Eclipse 中添加 Includes。这些依赖关系将在首次构建后自动解决。确保您的 Android SDK 和 NDK 在 Eclipse 中运行良好。我还将 SDK 和 NDK 路径添加到:

nano .bash_profile

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

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

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

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
于 2016-03-16T15:27:24.097 回答