我必须在ZOS中创建动态链接的库。哪个选项将传递给编译器。

另外,如何检查ZOS中的库是否在其他库上动态链接[依赖]。我们在Linux中有LDD,显示了此联系。我们在ZOS土地上是否有“ LDD”同等产品?

有帮助吗?

解决方案

您不会直接说出来,但我认为您的意思是C/C ++ DLL。您也可以使用其他语言(甚至是汇编程序)进行共享库,但是步骤会有所不同。

首先,您需要确定要导出的内容。许多IBM示例都使用编译器Exportall指令,但请注意,这可能会导致可执行文件非常缓慢,具体取决于您的编码样式。如果您不这样做,则需要#pragma导出任何要导出的任何内容(代码或数据)。不要忘记您可以导出数据(变量)以及可执行的功能...有时您需要此内容才能与DLL函数共享数据。

然后,您需要在 两个都 客户端(呼叫者)和DLL使用DLL链接...这是-WC,DLL编译选项,并且在启用时,它会在程序中生成额外的逻辑,以加载和管理DLL。如果您认为您需要更新dll而不完全替换,也可以为您的导出功能提供#pragma csect,这是一个好主意。

当您链接DLL时,请确保指定-wl,DLL选项(有很多方法...如果您在批处理中链接,则此部分不同 - 我假设您正在以某种形式的制作文件中构建)。该链接将生成实际的DLL,以及包含所有导出功能的“导入”语句的“侧面甲板”。您需要这些来链接您期望调用DLL的任何客户端程序。例如,如果您的导入位于名为AAA.X的文件中,C89 -WC,DLL MyApp.c AAA.X将编译调用代码,并意识到在AAA.X中的功能在某种形式的dll中。

就您指出DLL调用其他DLL的观点,不要忘记DLL可以“服务”和“消耗”功能...通过在其他DLL中包含侧面甲板,您可以拥有一个DLL,可以提供一些功能,同时提供一些功能致电其他DLL访问他人。

实际的DLL本身可以在多个地方取决于您的应用程序的性质。如果您是Unix Services友好的服务,那只是Libpath中的可执行文件。它也可以是steplib,lnklst,lpa等。

如果需要,可以使用dlopen(),dlsym()等在运行时明确访问DLL。通常,这使您可以准确地控制您正在使用的DLL(如果用户可以自己提供一个dll),并且它为您提供了在DLL中解决的功能指针的金额。

链接时还有其他一些基本的事情需要考虑,例如确保您的代码重新进入。其中大多数在IBM文档中阐明了在详细输出上,并亲自查看所有参数)。

如果您需要建立一个称呼什么的交叉引用,则UNIX Services“ NM”命令可以为您提供该信息。如果您制作详细的链接编辑列表,则在构建DLL时,所有数据也都在那里。

祝你好运!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top