Ссылка на NDK Библиотека C ++. Ошибка, нет таблицы символов архива (запустите ranlib) - PullRequest
0 голосов
/ 28 февраля 2020

описание

У нас есть проект C / C ++ wallet-core , использующий стороннюю библиотеку libsecp256k1 , и мы устанавливаем libsecp256k1 в /usr/local/lib и /usr/local/include, все хорошо работает в модульном тестировании ядра кошелька, пока мы не добавим его в android, который вызывает ядро ​​кошелька.

ссылки для вызова: android project -> wallet-core -> trezor_crypto -> libsecp256k1

Когда мы запустим tools/android-test, получил ошибку в ссылочном периоде:

xxxx -L/usr/local/lib trezor-crypto/libTrezorCrypto.a  libprotobuf.a  -llog  /usr/local/lib/libsecp256k1.a  -latomic -lm && :
  /Users/bibodeng/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/lib/gcc/x86_64-linux-android/4.9.x/../../../../x86_64-linux-android/bin/ld: error: /usr/local/lib/libsecp256k1.a: no archive symbol table (run ranlib)
  ../../../../../../trezor-crypto/src/ecdsa.c:1211: error: undefined reference to 'secp256k1_context_create'
  ../../../../../../trezor-crypto/src/ecdsa.c:1213: error: undefined reference to 'secp256k1_schnorr_sign'
  clang++: error: linker command failed with exit code 1 (use -v to see invocation)
  ninja: build stopped: subcommand failed.

  Configuring for JNI

две функции не определены и нет символов, подскажите ranlib. Результат ranlib:

$ranlib libsecp256k1.a
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ranlib: archive member: libsecp256k1.a(/0) size too large (archive member extends past the end of the file)

Я запускаю nm -g libsecp256k1.a и сказал, что это усеченный или неправильно сформированный архив.

Пожалуйста, помогите мне решить эту проблему, мы застряли на несколько дней. Большое спасибо.

угадайте причину

Я прочитал много ответов и угадаю причину:

  1. компоновщик запустит ranlib перед ссылкой, но не получится, потому что нет Ошибка символа ranlib, так как libsecp256k1.a
  2. файл архива слишком большой или, возможно, не в хорошем формате.
  3. libsecp256k1.a файл не сгенерирован должным образом, или у ranlib возникли проблемы.

коды и конфигурации

libsecp256k1: https://github.com/Bitcoin-ABC/secp256k1

./autogen.sh
mkdir build
cd build
../configure --enable-module-schnorr
make
make check
sudo make install

ядро ​​кошелька: https://github.com/IFWallet/wallet-core/tree/free_cash

git clone git@github.com:IFWallet/wallet-core.git
git checkout free_cash
cd wallet-core
./bootstrap.sh
./tools/android-test

скачайте коды с github и checkout free_cash branch, запустите верхний cmd получит такую ​​же ошибку.

относите ответы

Я уже попробовал этот ответ, но не сработал. НДК-нет-архив-символ стола

...