описание
У нас есть проект 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
и сказал, что это усеченный или неправильно сформированный архив.
Пожалуйста, помогите мне решить эту проблему, мы застряли на несколько дней. Большое спасибо.
угадайте причину
Я прочитал много ответов и угадаю причину:
- компоновщик запустит ranlib перед ссылкой, но не получится, потому что нет Ошибка символа ranlib, так как
libsecp256k1.a
- файл архива слишком большой или, возможно, не в хорошем формате.
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 получит такую же ошибку.
относите ответы
Я уже попробовал этот ответ, но не сработал. НДК-нет-архив-символ стола