제 3 자로부터 얻은 정적 라이브러리 (libexample.a)에 의존하는 라이브러리가 있습니다. 링크 단계에서 내 빌드가 실패했습니다. __aeabi_f2lz에 대한 불만은 정의되지 않았습니다. 정적 라이브러리를 검사했고 정의되지 않은 기호 __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"
실제로 해당 명령에 연결된 개체가 표시되지 않습니다. mylib은 정적 라이브러리 인'clang ++ -lgcc -lmylib'와 같은 것을 볼 것으로 기대하고 있습니다. 그렇다면 mylib가 링크되기 전에 libgcc가 검사되어 libgcc에서 물건을 가져 오지 않습니다. 또한 링크 명령에'-v'를 추가하여 clang이 전체 링커 명령 행을 알려주도록 할 수 있습니다.이 명령 행은 이러한 종류의 문제에 도움이 될 수 있습니다. –