【发布时间】:2020-06-16 06:08:57
【问题描述】:
构建了我的应用程序,最初使用debug,我现在开始准备将其投入生产。我已经改变了我的编译选项
-c -W"c,debug,LP64,sscomm,dll"
到
-c -s -W"c,LP64,sscomm,dll"
将生成的可执行文件的大小减少到调试版本的 60%。
我更改了链接选项
-W"l,LP64,DYNAM=DLL"
到
-s -W"l,LP64,DYNAM=DLL"
这进一步将生成的可执行文件的大小减少到原始调试版本的 20%。
所以它似乎确实在做某事。但是当我查看可执行文件时,我仍然可以看到可执行文件中所有引人注目的函数名,当我强制异常结束时,生成的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 数据集中删除符号信息?
【问题讨论】:
-
要删除符号条是你的朋友linux.die.net/man/1/strip
-
您可以将可执行文件直接放入数据集中,方法是将其指定为链接步骤的输出,例如-o "//'HLQ.DATA.SET.NAME(MEMBER)'"
-
嗨@Ôrel - 不确定在 z/OS 上是否如此 - 根据ibm.com/support/knowledgecenter/SSLTBW_2.2.0/…
标签: c mainframe debug-symbols zos