Объектные файлы неправильно добавлены в архив на Mac

Я пытаюсь создать архив из набора объектных файлов. я делаю это с

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 символы выглядят нормально, так что действительно похоже, что они были неправильно добавлены в архив.

Вот некоторые строки файла my_archive.afile как в Linux, так и в Mac (имена файлов объекта и архива, конечно, разные)

Линукс:

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_

Мак:

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 но опять нет прогресса.


person Manfredo    schedule 04.01.2016    source источник
comment
Нет успеха, даже если вы используете ranlib my_archive.a? (хотя на странице руководства написано, что ar s эквивалентен ranlib).   -  person roygvib    schedule 04.01.2016
comment
После этого я попытался: ar -rs my_archive.a foo.o bar.o other_object_files.o ranlib my_archive.a но без успеха.   -  person Manfredo    schedule 05.01.2016


Ответы (1)


Проблема в том, что по умолчанию общие символы не добавляются.

Опция 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

person Manfredo    schedule 05.01.2016