This has come up on a couple of libraries I work with regularly. See, for example:
- Error SSL archive symbol table (run ranlib)
- no archive symbol table (run ranlib) while building libcryptopp.a through ndk-build
In the questions, the users created an Android.mk for the OpenSSL and Crypto++ libraries. The pain point seems to be users adding the Android.mk wrapper to the sources.
Outside of Android, each project is Makefile based, each project builds a static archive, and each project builds a shared object based on the static archive. Each project also runs ranlib
on the static archive. Crypto++ is especially sensitive to the need for ranlib
because its a C++ library and One Definition Rule violations lead to undefined behavior.
When using Android.mk to build a static archive, how do we run ranlib on an archive through Android.mk?
Android.mk
runranlib
on the archive at build time. I also believe the OpenSSL makefile is broken in that it runsranlib
during install instead of a regularmake [all]
(or some other target). Make is not supposed to build components duringinstall
target. – Dactylology