对象文件未正确添加到mac上的存档

时间:2016-01-04 16:42:18

标签: macos linker fortran archive ar

我正在尝试从一组目标文件构建一个存档。 我这样做是为了

ar -rs my_archive.a foo.o bar.o other_object_files.o

在Linux机器上一切都很好但是当我在我的mac上尝试相同的命令时,似乎只添加了一些目标文件。这会产生与子例程相对应的未定义符号,例如other_object_files.o

此外,如果我尝试手动链接导致未定义符号的目标文件,我可以正确构建可执行文件。

那是

ifort -o my_exec main.o other_object_files.o my_archive.a

工作正常。

我是否错过了linux和mac之间的一些区别?

修改

nm other_object_files.o开始,符号看起来很好,所以它们就像没有正确添加到存档中一样。

以下是linux和mac中my_archive.a文件的一些行(当然,对象和归档文件的名称不同)

Linux的:

ed_2.1-opt.a:decomp_coms.o:0000000000000000 T decomp_coms._
ed_2.1-opt.a:decomp_coms.o:0000000000000038 R decomp_coms___debug_param_const
ed_2.1-opt.a:decomp_coms.o:0000000000000030 D decomp_coms_mp_cwd_frac_
ed_2.1-opt.a:decomp_coms.o:0000000000000008 D decomp_coms_mp_decay_rate_fsc_
ed_2.1-opt.a:decomp_coms.o:0000000000000000 D decomp_coms_mp_decay_rate_ssc_
ed_2.1-opt.a:decomp_coms.o:0000000000000010 D decomp_coms_mp_decay_rate_stsc_
ed_2.1-opt.a:decomp_coms.o:0000000000000004 C decomp_coms_mp_decomp_scheme_
ed_2.1-opt.a:decomp_coms.o:0000000000000044 C decomp_coms_mp_f_labile_

的Mac:

ed_2.1-opt.a:decomp_coms.o: 0000000000000000 T _decomp_coms._
ed_2.1-opt.a:decomp_coms.o: 000000000000058c S _decomp_coms._.eh
ed_2.1-opt.a:decomp_coms.o: 0000000000000010 C _decomp_coms_mp_cwd_frac_
ed_2.1-opt.a:decomp_coms.o: 0000000000000010 C _decomp_coms_mp_decay_rate_fsc_
ed_2.1-opt.a:decomp_coms.o: 0000000000000010 C _decomp_coms_mp_decay_rate_ssc_
ed_2.1-opt.a:decomp_coms.o: 0000000000000010 C _decomp_coms_mp_decay_rate_stsc_
ed_2.1-opt.a:decomp_coms.o: 0000000000000010 C _decomp_coms_mp_decomp_scheme_
ed_2.1-opt.a:decomp_coms.o: 0000000000000050 C _decomp_coms_mp_f_labile_

修改

也试过

libtool -static -arch_only x86_64 -o my_archive.a foo.o bar.o other_object_files.o

遵循此SO post但又没有进展。

1 个答案:

答案 0 :(得分:2)

问题是默认情况下不会添加明显常见的符号。

选项1:

ar -rs my_archive.a foo.o bar.o other_object_files.o ranlib -c my_archive.a

选项2:

libtool -c -static -o my_archive.a foo.o bar.o other_object_files.o