DLNA-UPNP-Platinum編譯

先放下我自己編譯成功本機的環境:

windows 10下的自帶的linux子系統
       Distributor ID: Ubuntu
       Description:    Ubuntu 18.04.1 LTS
       Release:        18.04
       Codename:       bionic

NDK= android-ndk-r10d

ANDROID_TOOLCHAIN    = 'arm-linux-androideabi-4.9'

錯誤1:

 Exception: ANDROID_NDK_ROOT environment variable not set:

詳情如圖:

scons: Reading SConscript files ...
********** Configuring Build Target = arm-android-linux / Release ********
Exception: ANDROID_NDK_ROOT environment variable not set:
  File "/mnt/f/proj/thirddemo/Platinum/SConstruct", line 1:
    SConscript('Build/Boot.scons')
  File "/usr/lib/scons/SCons/Script/SConscript.py", line 614:
    return method(*args, **kw)
  File "/usr/lib/scons/SCons/Script/SConscript.py", line 551:
    return _SConscript(self.fs, *files, **subst_kw)
  File "/usr/lib/scons/SCons/Script/SConscript.py", line 256:
    call_stack[-1].globals)
  File "/mnt/f/proj/thirddemo/Platinum/Build/Boot.scons", line 71:
    SConscript('Build.scons', variant_dir='Targets/'+env['target']+'/'+build_config, exports='env', duplicate=0)
  File "/usr/lib/scons/SCons/Script/SConscript.py", line 614:
    return method(*args, **kw)
  File "/usr/lib/scons/SCons/Script/SConscript.py", line 551:
    return _SConscript(self.fs, *files, **subst_kw)
  File "/usr/lib/scons/SCons/Script/SConscript.py", line 256:
    call_stack[-1].globals)
  File "/mnt/f/proj/thirddemo/Platinum/Build/Build.scons", line 166:
    execfile(target_config_file)
  File "/mnt/f/proj/thirddemo/Platinum/Build/Targets/arm-android-linux/Config.scons", line 15:
    raise Exception('ANDROID_NDK_ROOT environment variable not set')

 這個錯誤比較簡單,直接從錯誤信息能夠判斷出是環境變量沒有設置,直接執行:

export ANDROID_NDK_ROOT=/mnt/f/android_ndk/android-ndk-r10d

地址是自己本機實際的ndk路徑

錯誤2:

sh: 1: arm-linux-androideabi-g++: not found

scons: Reading SConscript files ...
********** Configuring Build Target = arm-android-linux / Release ********
Building for Android:
ANDROID_HOST_SYSTEM = linux-x86
ANDROID_TOOLCHAIN   = arm-linux-androideabi-4.4.3
ANDROID_PLATFORM    = android-9
ANDROID_ARCH        = arm
scons: done reading SConscript files.
scons: Building targets ...
arm-linux-androideabi-g++ -o Build/Targets/arm-android-linux/Release/Source/Tests/FileMediaServer/FileMediaServerTest.o -c -fno-exceptions -fno-rtti -Wall -D_REENTRANT -O3 -I/mnt/f/android_ndk/android-ndk-r14b/sources/cxx-stl/system/include --sysroot /mnt/f/android_ndk/android-ndk-r14b/platforms/android-9/arch-arm -msoft-float -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -D_REENTRANT -DNDEBUG -DNPT_CONFIG_ENABLE_LOGGING -DPLATINUM_UPNP_SPECS_STRICT -DANDROID -DNPT_CONFIG_HAVE_SYSTEM_LOG_CONFIG -IThirdParty/Neptune/Source/Core -IThirdParty/Neptune/Source/Data/TLS -ISource/Core -ISource/Extras -ISource/Platinum -IThirdParty/Neptune/Source/Core -IThirdParty/Neptune/Source/Data/TLS -ISource/Core -ISource/Extras -ISource/Platinum -ISource/Devices/MediaServer -IThirdParty/Neptune/Source/Core -IThirdParty/Neptune/Source/Data/TLS -ISource/Core -ISource/Extras -ISource/Platinum -IThirdParty/Neptune/Source/Core -IThirdParty/Neptune/Source/Data/TLS -ISource/Core -ISource/Extras -ISource/Platinum -ISource/Devices/MediaServer -ISource/Devices/MediaRenderer -IThirdParty/Neptune/Source/Core -IThirdParty/Neptune/Source/Data/TLS -ISource/Core -ISource/Extras -ISource/Platinum -IThirdParty/Neptune/Source/Core -IThirdParty/Neptune/Source/Data/TLS -ISource/Core -ISource/Extras -ISource/Platinum -ISource/Devices/MediaServer -IThirdParty/Neptune/Source/Core -IThirdParty/Neptune/Source/Data/TLS -ISource/Core -ISource/Extras -ISource/Platinum -IThirdParty/Neptune/Source/Core -IThirdParty/Neptune/Source/Data/TLS -ISource/Core -ISource/Extras -ISource/Platinum -ISource/Devices/MediaServer -ISource/Devices/MediaRenderer -ISource/Devices/MediaConnect Source/Tests/FileMediaServer/FileMediaServerTest.cpp
sh: 1: arm-linux-androideabi-g++: not found
scons: *** [Build/Targets/arm-android-linux/Release/Source/Tests/FileMediaServer/FileMediaServerTest.o] Error 127

什麼?編譯工具竟然找不到,找了一些參考資料發現是機器架構的指定問題,修改Build/Targets/arm-android-linux/Config.scons即可,‘-’號和‘+’號是我本地的git修改記錄

  PLATFORM_TO_TARGET_MAP = {
-       'linux-i386' : 'linux-x86',
-       'linux2'     : 'linux-x86',
+       'linux-i386' : 'linux-x86_64',
+       'linux2'     : 'linux-x86_64',
        'win32'      : 'windows',
        'cygwin'     : 'windows',
        'darwin'     : 'darwin-x86'

問題3:

aarch64-linux-android-g++: error: unrecognized command line option '-msoft-float'
aarch64-linux-android-g++: error: unrecognized command line option '-mthumb-interwork'

不識別的命令

解決辦法:修改Build/Targets/arm-android-linux/Config.scons交叉編譯工具的版本即可

ANDROID_TOOLCHAIN    = 'arm-linux-androideabi-4.9 

問題4:

In file included from Source/Core/PltUPnP.h:45:0,
                 from Source/Tests/FileMediaServer/FileMediaServerTest.cpp:39:
Source/Core/PltTaskManager.h:45:21: fatal error: Neptune.h: No such file or directory
 #include "Neptune.h"

直接cd進Neptune,發現竟然是空的(lll¬ω¬),只能自己下載Neptune庫了,下載完畢,將Neptune的Source和ThirdParty拷貝至Neptune中即可

這時按照官網執行命令即可:

> scons target=arm-android-linux build_config=Release
> cd Source/Platform/Android/module/platinum
> ndk-build NDK_DEBUG=0

成功編譯:

參考文章1:https://www.jianshu.com/p/0d076700dbd8

參考文章2:https://segmentfault.com/q/1010000002949387

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章