objcopy --rename-sym
을 사용할 수 없습니다.android NDK : objcopy --rename-sym가 작동하지 않습니다 (.so 파일에서 함수의 이름을 바꿔야 함)
#include <jni.h>
#include "dlog.h"
jint JNI_OnLoad(JavaVM* vm, void* reserved) {
DLOG("~~~~~~~~~~~~~~~~~~~~~~~ JNI_OnLoad ~~~~~~~~~~~~~~~~~~~~~~~~~");
return JNI_VERSION_1_6;
}
int myfunc() { return 0; }
명령 ~/an/ndk-build -j 4
는 말한다 :
[armeabi-v7a] Install : libTest.so => libs/armeabi-v7a/libTest.so
[armeabi] Install : libTest.so => libs/armeabi/libTest.so
[x86] Install : libTest.so => libs/x86/libTest.so
[mips] Install : libTest.so => libs/mips/libTest.so
(이 있습니다 링크 :
새로운 안드로이드 프로젝트에서 , 나는 디렉토리 JNI 및 파일 stub.c을 만들었습니다an -> ~/android-ndk-r9d/
ax -> android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/
ay -> ~/android-ndk-r9d/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/
)
은 그 때 나는
~/ax/arm-linux-androideabi-objcopy --redefine-sym myfunc=ourfunc libTest.so libTest-x.so
을하고
동일한 libTest-x.so를 얻을. 나는 물론 같은 결과로
~/ay/*objcopy
을 시도했다. 오류 메시지가 표시되지 않습니다. 그리고
myfunc()이 여전히 존재하며
ourfunc()이 없습니다.
.so 파일의 함수 이름을 어떻게 바꿉니 까?
.so 파일에서 비슷한 테스트를 시도했지만 성공하지 못했습니다. 그러나 ndk objcopy를 사용하여 .o 파일에서 일반 (vs 동적) 심볼의 이름을 바꿀 수있었습니다. 따라서 동적 기호 *에 대해서는 지원되지 않을 수 있습니다. http://sourceware.org/ml/binutils/2006-03/msg00005.html 일반적으로 binutils에서 지원되지 않을 수도 있음을 제안합니다. 누군가가 추가하려고했지만 실패했습니다. –
같은 길이의 대체 이름을 사용하도록 요구 사항을 조정할 수 있다면, 필자가 알지 못하는 필수 정렬이없는 한'sed'가 트릭을 할 수 있습니다. –