Как использовать ndk-стек с помощью Android NDK r20? - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь использовать команду ndk-stack, поставляемую с ndk.

К сожалению, когда я его запускаю, скрипт вылетает.

Команда, которую я запускаю в Windows: ...

ndk-stack.cmd -sym build / посредники / cmake / debug / obj / armeabi-v7a -dump stack.txt

Файл stack.txt содержит надгробный камень из logcat.

Я получаю ошибку ....

Traceback (последний вызов был последним): File "C: \ Android \ андроид-NDK-R20 \ прекомпилированное \ Windows-x86_64 \ Bin \ ndk-stack.py", строка 134, в main () Файл "C: \ Android \ android-ndk-r20 \ prebuilt \ windows-x86_64 \ bin \ ndk-stack.py", линия 83, в основном Файл proc = subprocess.Popen (cmd, stdin = subprocess.PIPE, stdout = subprocess.PIPE) "C: \ Android \ андроид-NDK-R20 \ прекомпилированное \ Windows-x86_64 \ Lib \ python2.7 / subprocess.py", строка 711, в init errread, errwrite) Файл "C: \ Android \ android-ndk-r20 \ prebuilt \ windows-x86_64 \ lib \ python2.7 / subprocess.py", строка 948, в _execute_child startupinfo) WindowsError: [Ошибка 2] Системе не удается найти указанный файл [Завершено за 0,1 с]

1 Ответ

2 голосов
/ 26 июня 2019

cferris исправил это на днях: https://android -review.googlesource.com / c / platform / ndk / + / 977970

вот патч, который вам нужно применить локально (или дождаться NDK r21):

diff --git a/ndk-stack.py b/ndk-stack.py
index 93aa0297..f1bb4cd6 100755
--- a/ndk-stack.py
+++ b/ndk-stack.py
@@ -32,6 +32,10 @@ def find_llvm_symbolizer():

     Returns: An absolute path to llvm-symbolizer(1)."""

+    llvm_symbolizer = 'llvm-symbolizer'
+    if os.name == 'nt':
+        # Windows has to include the exe or it won't be found.
+        llvm_symbolizer += '.exe'
     # ndk-stack is installed to $NDK/prebuilt/<platform>/bin, so from
     # `~/Downloads/android-ndk-r18/prebuilt/linux-x86_64/bin/ndk-stack`...
     # ...get `/usr/enh/Downloads/android-ndk-r18/`:
@@ -42,14 +46,14 @@ def find_llvm_symbolizer():
     # And from there construct the llvm-symbolizer path.
     llvm_bin = os.path.join(ndk_root, 'toolchains', 'llvm', 'prebuilt', arch,
                             'bin')
-    path = os.path.join(llvm_bin, 'llvm-symbolizer')
+    path = os.path.join(llvm_bin, llvm_symbolizer)
     if os.path.exists(path):
         return path

     # Okay, maybe we're a standalone toolchain? (https://github.com/android-ndk
/ndk/issues/931)
     # In that case, llvm-symbolizer and ndk-stack are conveniently in
     # the same directory...
-    return os.path.abspath(os.path.join(ndk_bin, 'llvm-symbolizer'))
+    return os.path.abspath(os.path.join(ndk_bin, llvm_symbolizer))


 def main():

в основном "вам нужно добавить .exe в два места, где упоминается llvm-symbolizer". (Я представил эту ошибку, потому что не думал, что вам нужно явно сказать «blah.exe».)

...