2016-01-04 8 views
2

Я пытаюсь создать архив из коллекции объектных файлов. Я делаю это сОбъектные файлы неправильно добавлены в архив на 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 относительно этого?

EDIT

От nm other_object_files.o символы выглядят хорошо, так что это на самом деле, как они, где должным образом не добавляются в архив.

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

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_ 

EDIT

Пробовал также

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

следующая этого SO post но опять никакого прогресса.

+0

Нет успеха, даже если вы используете "ranlib my_archive.a"? (хотя справочная страница говорит, что «ar s» эквивалентна ranlib). – roygvib

+0

Следующее [это] (http://docencia.ac.upc.edu/FIB/USO/Bibliografia/unix-c-libraries.html) Я пробовал: 'ar -rs my_archive.a foo.o bar.o other_object_files.o' 'ranlib my_archive.a' но без успеха. – Manfredo

ответ

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