Невозможно связать библиотеки при компиляции собственных модулей узлов для Android.Перекомпилируйте с проблемой -fPIC при использовании флага -fPIC - PullRequest
0 голосов
/ 18 октября 2018

Этот вопрос в основном связан с node-gyp, GCC и цепочкой инструментов NDK, но я добавлю полный контекст, потому что это может быть необходимо.

Context

Я создаю приложение, используя React Native.Поскольку в этом приложении мне нужно использовать собственные библиотеки узлов, я использую этот модуль узла nodejs-mobile для запуска процесса Node.js в Android и iOS.

При добавлении composer-admin , у меня проблемы с компиляцией для Android.

Ошибка

Сбой компилятора при подключении необходимого модуля grpc_nodecomposer-admin зависимостью.Ошибка:

[LIB 1 PATH OMITTED] requires unsupported dynamic reloc R_ARM_REL32; recompile with -fPIC ... [LIB N PATH OMITTED] requires unsupported dynamic reloc R_ARM_REL32; recompile with -fPIC clang70++: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [grpc_node.target.mk:189: Release/obj.target/grpc_node.node] Error 1 make: Leaving directory '/home/vanclief/Cacao_repos/react-app/android/build/nodejs-native-assets-temp-build/nodejs-native-assets-armeabi-v7a/nodejs-project/node_modules/fabric-client/node_modules/grpc/build'

Странно то, что используется флаг -fPIC, как указано в common.gypi :

/home/vanclief/Cacao_repos/react-app/android/build/standalone-toolchains/arm-linux-androideabi/bin/arm-linux-androideabi-clang++ -shared -g -rdynamic -fPIC -Wl,-soname=grpc_node.node -o

Это полный журнал компиляции

Ответы [ 2 ]

0 голосов
/ 04 января 2019

Как вы редактировали common.gypi?У меня очень похожая проблема с такой же ошибкой requires unsupported dynamic reloc R_ARM_REL32; recompile with -fPIC

Я вижу, что common.gypi имеет ldflags для -fPIC.Я перешел на следующий, но все еще получаю ту же проблему.Пожалуйста, предоставьте исправление

['OS=="android"', {
        'conditions': [
          [ 'node_shared=="true"', {
            'ldflags': [ '-fPIC' ],

'cflags': ['-fPIC'], #Change 1

          }]
        ],
        'target_conditions': [
          ['_toolset=="target"', {
            'defines': [ '_GLIBCXX_USE_C99_MATH' ],
            'libraries': [ '-llog' ],
          }],
          [ '_type=="loadable_module"', {
            'ldflags': [ '-fPIC' ],

'cflags': ['-fPIC'], #Change 2

            'conditions': [
              # While loading a native node module, Android needs to have a
              # (NEEDED) entry for libnode.so, or it won't be able to locate
              # referenced symbols.
              # We link to the binary libraries that are distributed with the
              # nodejs-mobile headers so the (NEEDED) entry is created
              [ 'target_arch=="arm"', {
                'libraries': ['>(node_root_dir)/bin/armeabi-v7a/libnode.so'],
              }],
              [ 'target_arch=="arm64"', {
                'libraries': ['>(node_root_dir)/bin/arm64-v8a/libnode.so'],
              }],
              [ 'target_arch=="x86"', {
                'libraries': ['>(node_root_dir)/bin/x86/libnode.so'],
              }],
              [ 'target_arch=="x86_64"', {
                'libraries': ['>(node_root_dir)/bin/x86_64/libnode.so'],
              }],
            ],
          }],
        ],
      }],
0 голосов
/ 18 октября 2018

common.gypi не так.Имеет -fPIC в флагах ld.Это должно быть в cflags.

...