2012-12-13 3 views
1

내 공유 라이브러리를 컴파일하는 동안 기존 공유 라이브러리 (FlashRuntimeExtensions.so)를 C 코드에 링크하려고합니다. 그러나 무엇을 시도 하든지 나는 항상 같은 오류를 겪습니다. 파일 형식이 잘못되었습니다. 아무도이 문제를 해결하는 방법에 대한 아이디어가 있습니까? 일반적으로 .so에서다른 .so 링크로 공유 라이브러리 컴파일

$ g++ -Wall ane.c FlashRuntimeExtensions.so -o aneObject 
FlashRuntimeExtensions.so: could not read symbols: File in wrong format 
collect2: ld gaf exit-status 1 terug 
+1

'$ file FlashRuntimeExtensions.so'이 명령의 출력 내용은 무엇입니까? – SirDarius

+0

http://stackoverflow.com/questions/2527780/c-linker-error-sdl-image-could-not-read-symbols – Jeyaram

+0

@SirDarius : FlashRuntimeExtensions.so : ELF 32 비트 LSB 공유 객체, ARM, 버전 1 (SYSV), 동적으로 연결됨, 스트립 됨 –

답변

1

명령 줄은 86 코드를 생성하고 배포에서 사용할 수있는 기본 g ++를 사용하여 ARM 코드에 연결을 시도합니다.

이것은 작동하지 않습니다. 여기에 안드로이드 NDK 사용할 수 사용 : NDK 리눅스, OS X 및 Windows에 기본 ARM 바이너리를 생성 할 수있는 크로스 툴체인 세트 (등 컴파일러, 링커, ..) 포함 http://developer.android.com/tools/sdk/ndk/index.html

을 (Cygwin에서 사용) 플랫폼.

+0

아, 알겠습니다. 감사! –

0

-l을 사용하여 연결됩니다 :

은 여기 내 컴파일 명령입니다.

예를 들어 pthread -lpthread을 사용합니다. @ 냉기의 진술에 따라

gcc sample.c -o myoutput -lpthread

그러나 같은 은, 당신이 명령하고 있습니다 만 맞습니다.

다음 링크를 참조하십시오.

C++ Linker Error SDL Image - could not read symbols

+1

OP 명령 줄 자체로 완벽하게 OK입니다. '-l' 옵션을 사용해서 만 라이브러리를 링크 (공유 여부) 할 필요는 없습니다. – chill

+0

@chill, 고마워. 나는'-l'이 필수라고 생각했습니다. – Jeyaram

+0

흠, 시도해 보면 -L 옵션을 사용하여 경로를 지정하더라도 지정된 라이브러리를 찾을 수 없다는 오류가 발생합니다. 그러나 링크에서 읽는 데 호환성 문제가있을 수 있습니다. –

0

아키텍처 불일치 여야합니다. 나는이 문제를 한 번 겪었고 같은 대상 플랫폼에 libs를 빌드하여 해결했습니다. 리눅스 나 유닉스와 같은 OS를 사용하고 있다면 파일 명령을 통해 볼 수 있으며 윈도우를 사용하고 있다면 종속성 워커를 사용하여 볼 수 있습니다. 모든 libs가 아키텍처와 일치하는지 확인해야합니다.

관련 문제