z/OS 生成零长度侧甲板文件,不显示警告

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

我正在尝试在 z/OS 上编译可执行文件。 最后一步因一些未定义的符号而失败。 据推测,这是因为之前生成 .so 的步骤也生成了零长度 .x 文件。 .so 看起来很正常,在其上执行“nm”会显示已定义的缺失符号。

典型的.o是用

编译的
xlclang -c -m64 -fvisibility=default -DOS390 -DZOS -D_EXT=1 -D_ALL_SOURCE -Duserelocatableinc -DMAXSIG=39 -DNSIG=39 -DOEMVS -DYYDYNAMIC -DNO_LOCALE_MESSAGES -D_OPEN_THREADS=3 -D_UNIX03_SOURCE=1 -D_AE_BIMODAL=1 -D_XOPEN_SOURCE_EXTENDED -D_ALL_SOURCE -D_ENHANCED_ASCII_EXT=0xFFFFFFFF -D_OPEN_SYS_FILE_EXT=1 -D_OPEN_SYS_SOCK_IPV6 -D_XOPEN_SOURCE=600 -D_XOPEN_SOURCE_EXTENDED -D_SHR_ENVIRON -DNO_NL_LOCALE_NAME -DDEBUGGING -g -c -m64 util.c 

产生零长度 .x 的步骤看起来像

clang -o libperl.so -shared -Wl,-bedit=no -m64 op.o perl.o universal.o av.o builtin.o caretx.o class.o  deb.o doio.o doop.o dquote.o  dump.o globals.o gv.o hv.o  keywords.o locale.o mathoms.o mg.o  mro_core.o numeric.o pad.o peep.o  perlio.o perly.o pp.o pp_ctl.o  pp_hot.o pp_pack.o pp_sort.o pp_sys.o  reentr.o regcomp.o regcomp_debug.o regcomp_invlist.o regcomp_study.o regcomp_trie.o  regexec.o run.o scope.o sv.o  taint.o time64.o toke.o utf8.o  util.o   os390.o /karlw/zopen/usr/local/zopen/zoslib/zoslib/lib/libzoslib.x DynaLoader.o -lm -lc 

任何建议,包括我可以采取的进一步调试步骤,将不胜感激

c perl clang zos
1个回答
0
投票

通常你不想混合使用不同的编译器。您有 xlclang 和 clang,它们是不同的编译器。在这种情况下,它可以工作,但您确实需要确保导出您想要作为侧面板一部分的任何函数或数据。您是否为初始编译指定了类似 -qexportall 选项的内容?

例如,这是一个有效的简单设置。您也可以尝试简单的源代码和编译命令集,然后构建现有的编译命令。

---funcs.c---

int fool1(int val1) {
  return val1 * 11;
}

int passCode(void) {
  return 5;
}

int checkTheCode(int code) {
  return code == 55;
}

int main(void) {
  if (checkTheCode(foo11(passCode()))) {
    return foo11(passCode());
  } else {
    return fool1(6);
  }
}

xlclang funcs.c -c -m64 -fvisibility=default -qexportall

clang -o funcs.so --shared -Wl,-bedit=no -m64 funcs.o

这应该给你以下信息:

--- funcs.x ---

IMPORT CODE64,'funcs.so','checkTheCode'
IMPORT CODE64,'funcs.so','fool1'
IMPORT CODE64,'funcs.so','passCode' 

希望这有帮助

z/OS XL C/C++ 编译器开发

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