2009-04-13 2 views
0

난 내가 리얼 뷰 개발 스위트 도구를 사용하여 Windows에 만든 공유 객체 창에 명령을 연결 한 호스트 -printfs는

armlink에서 -o mylib.so < "내 * .o 여기에 주어진 파일 ">

그런 다음 gcc 도구를 사용하여 Linux에서이 mylib.so 공유 라이브러리와 응용 프로그램을 연결합니다.

나는이 mylib.so 함수 내부의 printf 문을 가지고 있지만, 나는 최종 실행 파일을 실행할 때, 나는 콘솔에있는 printf와 출력을하지 않습니다. (printfs가 호출 될 때마다 STDIO.H가 inlcuded입니다됩니다) 그래서

공유 라이브러리에서 printf 또는 시스템 함수/시스템 호출/런타임 라이브러리 함수가 제대로 작동하지 않는 것으로 알려진 문제점이 있습니까?

또는 컴파일러 도구 체인을 기반으로 Windows에서 공유 라이브러리를 만드는 내 고유 설정과 관련이 있지만이 공유 라이브러리를 linux-gcc 컴파일러 도구의 응용 프로그램과 연결하면됩니까?

감사합니다. 대상부터

-AD

답변

0

팔, 그리고 나는 창문에 일부 파일을 컴파일하는 문제 다음 리눅스에 연결해서는 안이 C입니다 가정합니다. 그러나 이것을 확인 했습니까? 나는에서는 hello.c에서 링크 창에 hello.so을 만드는 제안 :

#include <stdio.h> 
void hello(void) {printf("Hello\n");} 

다음은 리눅스에서의 main.c에서 메인 링크 :

void hello(void); 
int main(int argc, char *argv[]){ hello(); return 0; } 

을 최소 컴파일러 체인 테스트한다.


당신이에서 출력을 얻을 수 있습니까 (공유 라이브러리에서 즉 코드가 아닌) 최종 실행 파일에 정의 당신이 코드에서의 printf를 호출 할 경우?


strings --print-file-name -a mylib.so final_executable | grep "string from printf in shared library" 

수익이 occurenses합니까?


readelf -a mylib.so 
readelf -a final_executable 

에서의 printf에 대한 참조가 있습니까?

+0

@hlovdal : 메인/응용 프로그램에있는 printfs가 올바르게 인쇄됩니다. 공유 라이브러리 안에있는 것들만이 '출력'되지 않습니다. 또한 라이브러리 생성 및 실행 파일에 링크가 올바르게 발생하는 것 같습니다. 'readelf', 'strings --printf ..'출력을 확인합니다. -AD – goldenmean