mac 上的目标文件未正确添加到存档
Object files not properly added to archive on mac
我正在尝试从目标文件集合构建一个存档。
我用
做这个
ar -rs my_archive.a foo.o bar.o other_object_files.o
.
在 linux machine 上一切正常,但是当我在 mac 上尝试完全相同的命令时,似乎只添加了一些目标文件。这导致对应于子程序的未定义符号,比方说,other_object_files.o
.
此外,如果我尝试手动 link 产生未定义符号的目标文件,我可以正确构建可执行文件。
也就是
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 但还是没有进展。
问题是默认不添加明显常见的符号。
选项 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
我正在尝试从目标文件集合构建一个存档。 我用
做这个ar -rs my_archive.a foo.o bar.o other_object_files.o
.
在 linux machine 上一切正常,但是当我在 mac 上尝试完全相同的命令时,似乎只添加了一些目标文件。这导致对应于子程序的未定义符号,比方说,other_object_files.o
.
此外,如果我尝试手动 link 产生未定义符号的目标文件,我可以正确构建可执行文件。
也就是
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
问题是默认不添加明显常见的符号。
选项 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