2010-12-09 5 views
5

zOS에서 동적으로 링크 된 라이브러리를 만들어야합니다. 컴파일러에 전달할 옵션은 무엇입니까?zOS의 동적 연결

또한 zOS의 라이브러리가 다른 라이브러리에 동적으로 링크되어 있는지 확인하는 방법. linux에는 ldd가 있는데,이 링크를 보여줍니다. 우리는 zOS 땅에서 'ldd'에 해당하는 것이 있습니까?

+0

[동적 링크 라이브러리 작성 및 사용] (http://publib.boulder.ibm.com/infocenter/zos/v1r10/index.jsp?topic=/com.ibm.zos.r10.cbcpx01)을 확인 했습니까? /dllsim.htm)? – NealB

+0

예. 필자는 빌드 스크립트를 수정하여 동적으로 라이브러리 링크를 만들었습니다. 변경 사항을 확인하는 도구를 찾습니다. – user170008

답변

2

직접 말하지는 않지만 C/C++ DLL을 의미한다고 가정합니다. 다른 언어 (예 : 어셈블러)로 공유 라이브러리를 만들 수도 있지만 그 단계는 다를 수 있습니다.

먼저 내보낼 항목을 결정해야합니다. 많은 IBM 예제는 컴파일러 EXPORTALL 지시문을 사용하지만 코딩 스타일에 따라 매우 느린 실행 파일로 이어질 수 있습니다. EXPORTALL을하지 않으면 내보내려는 모든 항목 (코드 또는 데이터)에 #pragma export가 필요합니다. 데이터 (변수)와 실행 가능한 함수를 내보낼 수 있다는 것을 잊지 마십시오. 때때로 DLL 함수와 데이터를 공유하기 위해이 함수가 필요합니다. 활성화 된 경우

그런 다음, 당신은 DLL의 연결을 사용하는 모두 클라이언트 (발신자) 및 DLL에 컴파일 옵션을 설정해야합니다 ... 이것은 -Wc, DLL 컴파일 옵션과, 그것의 추가 로직을 생성하는 당신의 DLL을로드하고 관리하는 프로그램. DLL을 완전히 바꾸지 않고 업데이트 할 필요가 있다고 생각되는 경우 내 보낸 함수에 #pragma csect도 포함시키는 것이 좋습니다.

DLL을 연결할 때 -Wl, DLL 옵션을 지정해야합니다 (여러 가지 방법이 있습니다 ...이 부분은 일괄 적으로 연결하면 다릅니다 - 저는 make에서 빌드 중이라고 가정합니다. 어떤 종류의 파일). 링크는 내 보낸 모든 기능에 대한 "IMPORT"문을 포함하는 "사이드 데크"뿐만 아니라 실제 DLL을 생성합니다. DLL을 호출 할 것으로 예상되는 클라이언트 측 프로그램을 연결하려면이 파일이 필요합니다. 예를 들어, 가져 오기가 AAA.x, c89 -Wc라는 파일에있는 경우 DLL myapp.c AAA.x는 AAA.x의 함수가 DLL의 일종으로 해제되어 있음을 인식하여 호출 코드를 컴파일합니다.

다른 DLL을 호출하는 DLL에 관해서는 DLL이 "제공"하고 "사용"할 수 있다는 것을 잊지 마십시오 ... 다른 DLL의 함수에 대한 사이드 데크를 포함하면 DLL을 가질 수 있습니다. 다른 DLL을 호출하는 동안 일부 기능을 제공하여 다른 DLL에 액세스합니다.

실제 DLL 자체는 앱의 특성에 따라 여러 위치에있을 수 있습니다. 유닉스 서비스에 친숙하다면 LIBPATH에서 실행 파일 일 뿐이다. STEPLIB, LNKLST, LPA 등이 될 수도 있습니다.

필요한 경우 dlopen(), dlsym() 등을 사용하여 런타임에 명시 적으로 DLL에 액세스 할 수 있습니다. 일반적으로이 기능을 사용하면 사용중인 DLL을 정확하게 제어 할 수 있습니다 (사용자가 직접 제공 할 수있는 경우 편리 할 때도 있음). 그리고 DLL에서 해결 된 포인터 기능을 제공합니다.

코드를 재진입 가능하도록 설정하는 것과 같이 링크 할 때 고려해야 할 몇 가지 기본적인 사항이 있습니다. 이것들 대부분은 IBM 문서에서 찾을 수 있습니다. "c89"(또는 이와 동등한 것)로 빌드하면, 보통 올바른 옵션이 자동으로 설정됩니다 (사실, 무슨 일이 일어나고 있는지, 자세한 정보를 출력하고 자신을위한 모든 매개 변수를보십시오).

무엇이 호출되는지에 대한 상호 참조를 구축해야하는 경우 UNIX 서비스 "nm"명령을 통해 해당 정보를 얻을 수 있습니다. 자세한 링크 편집 목록을 작성하면 DLL을 빌드 할 때 모든 데이터가 여기에 있습니다.

행운을 빈다.

관련 문제