3
VS-android 프레임 워크를 사용하여 Microsoft Visual Studio 2012 + Android NDK에서 직접 Android 공유 오브젝트를 컴파일하고 있습니다. IDA를 사용하여 .so 파일을 분해했고 모든 코드가 완벽하게 표시되는지 (함수 이름, 데이터 버퍼 이름, 클래스 이름 등) 볼 수있었습니다.빌드 도중 .so 파일에서 심볼을 제거하는 방법
모든 디버그 및 불필요한 기호를 제거하여 코드를 분해하여 이해하기 어렵습니다.
컴파일 과정은 다음과 같습니다 :
- 내가 10 개 C++ 파일이 있습니다. 각각은 .o 파일로 컴파일됩니다.
- main_service.c는 main.o로 컴파일되고 다른 모든 * .o 파일과 링크되어 main_service.so 라이브러리를 생성합니다.
나는 다음과 같은 솔루션을 시도하고 작동하지 않았다 :
- 이 -strip - 모든 컴파일러 및 링커에 인수주기. 그것은 작동하지 않는 것 같습니다.
- 연결 후 main_service.o에서 -strip-all을 사용하여 objcopy.exe를 호출하십시오. 이것은 main_serivce.so의 크기를 조금 줄이지 만 심볼은 남아 있습니다.
- 내 C++ 코드에서는 " ((visibility())"속성을 사용하지 않습니다. 그렇기 때문에 링커가 심볼을 제거 할 수 없다는 것이 문제입니다 무엇이 사적인 것인지 알 수 있고 숨길 수 있으며 무엇이 공개인지 알 수 있습니다. JNI에서 사용하고자하는 main_service.c의 함수에 ""속성 ((visibility ("default"))) "을 추가하려고했습니다. 컴파일러와 링커에 -fvisibility = hidden 플래그를 추가했습니다. 하지만 경고가 나타납니다. '가시성'속성은 무시되며 기호는 제거되지 않습니다.
무엇이 여기에 있습니까?
p.s. - 나는 완전히 "기호 박탈"에 대해 매우 신물이났다. 내 질문이 약간 바보라면 미안하다.
-
안녕하세요, 어떻게 CMake가 관련된 일을 할 수 있습니까? 그리고이 명령은 .so 파일의 크기를 줄입니까? –