从z / OS上的C语言可执行文件中删除符号信息

问题描述 投票:0回答:1

[最初使用debug构建了我的应用程序,现在我准备将其投入生产。我从[

更改了编译选项
-c -W"c,debug,LP64,sscomm,dll"

to

-c -s -W"c,LP64,sscomm,dll"

将生成的可执行文件的大小减小到调试版本的60%。

我从以下更改了链接选项

-W"l,LP64,DYNAM=DLL"

to

-s -W"l,LP64,DYNAM=DLL"

这进一步将生成的可执行文件的大小减小到原始调试版本的20%。

所以它似乎确实在做something。但是,当我查看可执行文件时,仍然可以在可执行文件中看到所有函数名,并且当我强制放弃时,生成的CEEDUMP仍显示该文件中的所有函数名。我希望-s会删除所有符号信息。

所以我的问题是“如何删除所有符号信息?”

此外,一旦与-s链接,我将无法再将模块从生成模块的USS文件复制到MVS数据集。我使用以下命令:-

cp -X prog "//'ME.USER.LOAD(PROG)'"

失败:-

 IEW2523E 3702 MEMBER *NULL* IDENTIFIED BY DDNAME /0000002 IS NOT AN EDITABLE
          MODULE AND CANNOT BE INCLUDED.
 IEW2510W 3704 ENTRY OFFSET  0 IN MODULE *NULL* IDENTIFIED BY DDNAME /0000002
          DOES NOT EXIST IN A VALID SECTION.
cp: FSUMF140 IEWBIND function "INCLUDE" failed with return code 8 and reason code 83000505

此错误消息似乎表明我需要EDIT链接选项,但是如果我添加该选项,则它似乎取消了在链接上使用-s的步骤,因为该尺寸返回了60%的调试版本的大小。

所以我的第二个问题是,“如何将文件复制到MVS数据集并删除符号信息?”

也许我可以采取后续步骤来再次驱动活页夹,以便在复制后从USS文件和MVS数据集中删除符号信息?

c mainframe debug-symbols zos
1个回答
0
投票
您可以使用COMPRESS编译器选项,并在某种程度上可以使用COMPACTCOMPRESS选项将禁止在控制块中发出函数名,而COMPACT选项将影响编译器的优化选择,以支持较小的对象大小。

即使在USS中编译和链接可执行文件,也不需要在USS中生成可执行文件,然后将其复制到数据集。您可以使用-o "//'ME.USER.LOAD(PROG)'"语法将可执行文件直接放入数据集中。只要确保您的输出数据集是PDSE

由于在USS中进行编译和链接,因此应将xlc实用程序与-q语法一起用于编译器选项,因为该语法避免了在外壳程序中具有特殊含义的括号的使用。

© www.soinside.com 2019 - 2024. All rights reserved.