Windows 호스트에서 RVDS 컴파일러를 사용하여 * .o 객체 코드 파일 (C 소스 코드)을 사용하여 공유 라이브러리 (* .so)를 만들었습니다.공유 라이브러리에서 심볼을 내보내는 방법
나는 (리눅스 호스트에 팔 대상에 대한 GCC를 사용하여) 응용 프로그램이 공유 객체를 연결하고 실행에 세그먼트 오류를 생성하는 실행 파일을 얻을 수 있습니다. (나는 내가 그것을 디버깅해야 알아!)
대신 공유 라이브러리 만들기, 같은 소스 파일로 정적 라이브러리를 만든 다음 응용 프로그램과 연결 한 다음 응용 프로그램을 실행하면 예상대로 작동합니다.
그래서 제 질문은 다음과 같습니다 : -
연결된 때 나는 그것이 잘 작동하도록 일부 구조를 사용하여 내 소스 파일에 명시 적으로 심볼 (함수 응용 프로그램에 수출) 또는 다른 기호를 수출해야합니까 신청서와 함께? 필요한 것은 무엇이며 어떻게해야합니까?
공유 라이브러리는 어떻게 작동합니까? 즉, 함수가로드되고 실행되는 주소는 라이브러리가 생성 될 때 라이브러리에 제공됩니다. 응용 프로그램 (main())은 라이브러리 함수가 실행될 주소를 어떻게 해석합니까?
정적 라이브러리는 어떻게 작동합니까? 즉 정적 라이브러리의 경우 주소 지정 및 해결 방법은 어떻게됩니까?
감사합니다.
1) 아니, 당신은 아무것도 할 필요가 없습니다 :
@Jonathan : dlopen() 호출을 사용하여 공유 라이브러리를로드하지 않습니다. – goldenmean
OK - 아이디어가 없습니다. 나는 유닉스/리눅스에 대해 더 잘 알고있다. 나는 더 많은 도움이 될지도 모른다. –