Удаление информации о символах c из исполняемого файла C в z / OS - PullRequest
3 голосов
/ 16 июня 2020

Создав свое приложение, первоначально используя 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 удалит всю информацию о символах c.

Итак, мой вопрос: «Как мне удалить всю информацию о символах c?»

Кроме того, после того, как я связан с -s Я больше не могу копировать модуль в набор данных MVS из файла USS, в котором он был создан. Я использую следующую команду: -

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, а также удалить символьную c информацию? "

Может быть, есть следующий шаг, который я могу предпринять, чтобы снова запустить связыватель, чтобы удалить символьную c информацию из файла USS и из набор данных MVS после копии?

1 Ответ

4 голосов
/ 16 июня 2020

Вы можете использовать параметр компилятора COMPRESS и в некоторой степени COMPACT. Параметр COMPRESS подавляет выдачу имен функций в управляющих блоках, а параметр COMPACT будет влиять на выбор оптимизации компилятора в пользу меньшего размера объекта.

Даже если вы компилируете и связываете свой исполняемый файл в USS, вам не нужно создавать исполняемый файл в USS, а затем копировать его в набор данных. Вы можете поместить свой исполняемый файл прямо в набор данных, используя синтаксис -o "//'ME.USER.LOAD(PROG)'". Просто убедитесь, что ваш набор выходных данных - PDSE.

Поскольку вы компилируете и связываете в USS, вам следует использовать утилиту xlc с синтаксисом -q для параметров компилятора, поскольку этот синтаксис позволяет избежать использования скобок, которые имеют особое значение в оболочке.

...