私は第三者から入手した静的ライブラリ(libexample.a)に依存するライブラリを持っています。 リンクステージで私のビルドが失敗しました__aeabi_f2lzについての不平は不定です。私は静的なlibをチェックし、定義されていないシンボル__aeabi_f2lzを持っています。リンク中にこのシンボルが解決されると思います。また__aeabi_f2lzはどこに実装されていますか?
、私は自分のライブラリにこのようなコードを追加した場合:
volatile float fixme_float = 1.3f;
volatile int64_t fixme_int64 = static_cast<int64_t>(fixme_float);
リンクエラーが消えます。私は上記のコードが__aeabi_f2lzの使用を余儀なくされ、不思議にリンクエラーを解決したと思います。私はこれがちょうどリンクオーダーの問題だと思う。
どのライブラリに__aeabi_f2lzの実装が含まれているか知っていますか?私は問題を解決できるかどうかを見るために静的ライブラリをリンクした後、ライブラリに依存関係を強制したい。それとも、私はこれが注文を結びつけるためだと主張する権利さえあるのでしょうか? Android NDKのスタンドアロンアームツールチェーンを使用しています。
ありがとうございました!
アップデート[1]: ビルドコマンドは次のとおりです。
third_party/llvm-build/Release+Asserts/bin/clang++ -shared -Wl,--fatal-warnings \
-fPIC -Wl,-z,noexecstack -Wl,-z,now -Wl,-z,relro -Wl,-z,defs -Wl,--as-needed \
--gcc-toolchain=third_party/android_tools/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 \
-fuse-ld=gold -Wl,--icf=all -Wl,--no-undefined -Wl,--exclude-libs=libgcc.a \
-Wl,--exclude-libs=libc++_static.a -Wl,--exclude-libs=libvpx_assembly_arm.a \
--target=arm-linux-androideabi -Werror -nostdlib \
--sysroot=.third_party/android_tools/ndk/platforms/android-16/arch-arm \
-Wl,-wrap,calloc -Wl,-wrap,free -Wl,-wrap,malloc -Wl,-wrap,memalign \
-Wl,-wrap,posix_memalign -Wl,-wrap,pvalloc -Wl,-wrap,realloc -Wl,-wrap,valloc \
-Lthird_party/android_tools/ndk/sources/cxx-stl/llvm-libc++/libs/armeabi-v7a \
-o "./lib.unstripped/libexample.so" -Wl,-soname="libexample.so"
実際には、そのコマンドでリンクされているオブジェクトは表示されません。私は 'clang ++ -lgcc -lmylib'のようなものを見ることを期待しています。ここでmylibは静的ライブラリです。もしそうなら、libgccはmylibがリンクされる前にチェックされます。つまり、libgccから決して選択されません。 '-v'をリンクコマンドに追加することで、clangに完全なリンカーコマンドラインを教えることができます。これは、この種の問題に役立ちます。 –