Fortran:解释“架构x86_64的未定义符号”

时间:2015-04-08 13:15:01

标签: linker fortran

编译程序时,会显示以下错误消息:

Undefined symbols for architecture x86_64:
  "_jrand_", referenced from:
      ___trfind_module_MOD_trfind in ccqRBw2L.o
     (maybe you meant: ___jrand_module_MOD_jrand)
  "_left_", referenced from:
      ___trmesh_module_MOD_trmesh in ccq56SyA.o
     (maybe you meant: ___left_module_MOD_left)
  "_lstptr_", referenced from:
      ___intadd_module_MOD_intadd in ccr7Tz7x.o
      ___swap_module_MOD_swap in cclq1Td3.o
      ___trfind_module_MOD_trfind in ccqRBw2L.o
      ___addnod_module_MOD_addnod in ccwGNCEK.o
     (maybe you meant: ___lstptr_module_MOD_lstptr)
  "_store_", referenced from:
      ___trfind_module_MOD_trfind in ccqRBw2L.o
     (maybe you meant: ___store_module_MOD_store)
  "_swptst_", referenced from:
      ___addnod_module_MOD_addnod in ccwGNCEK.o
     (maybe you meant: ___swptst_module_MOD_swptst)
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status

据我所知,这是因为模块之间的链接不正确。我的问题是如何解释编译器提供的信息。例如,“ccqRBw2L.o”中的含义是什么?

1 个答案:

答案 0 :(得分:1)

对您而言,最重要的是建议maybe you meant

很可能你忘了use相关的模块。特别是

"_jrand_", referenced from:
      ___trfind_module_MOD_trfind in ccqRBw2L.o
     (maybe you meant: ___jrand_module_MOD_jrand)

当链接目标文件ccqRBw2L.o(名称由您的构建机制,某些Makefile或类似文件控制)时,链接器未找到任何符号_jrand_,这将是一个外部子例程或函数{ {1}}。

然而,链接器看到有一个名为jrand的东西。

jrand

但它不是外部的,它似乎位于名为 maybe you meant: ___jrand_module_MOD_jrand 的模块中。

在调用此模块中的子例程或函数时,应确保使用模块(jrand)。