构建了我的应用程序(最初使用)后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数据集中删除符号信息?
您可以COMPRESS
在某种程度上使用编译器选项COMPACT
。该COMPRESS
选项将禁止在控制块中发出函数名,而该COMPACT
选项将影响编译器的优化选择,以支持较小的对象大小。
即使您正在USS中编译和链接可执行文件,也无需在USS中生成可执行文件,然后将其复制到数据集。您可以使用-o "//'ME.USER.LOAD(PROG)'"
语法将可执行文件直接放入数据集中。只要确保您的输出数据集是即可PDSE
。
由于您是在USS中进行编译和链接的,因此您应该将该xlc
实用程序与-q
语法一起用于编译器选项,因为该语法避免了在Shell中使用特殊含义的括号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句