Дилемма Libtorch / Pytorch при объединении статической библиотеки в одну библиотеку STATIC - PullRequest
0 голосов
/ 27 мая 2019

У меня около 26 статических библиотек, таких как liba.a, libb.a, libc.a, ..., libz.a.Здесь есть два улова:

1) циклические зависимости, например, между liba.a и libb.a;

2) некоторые lib*.a имеют статический глобальный регистрационный код, на который нет ссылок, но должныНЕ быть раздетым

Благодаря stackoverflow мне удалось решить две вышеупомянутые проблемы с опцией ld -Wl,--whole-archive -la -lb -lc -ld -le ...(omitted)... -lz -Wl,--no-whole-archive -lpthread -lm -ldl -lrt -fopenmp, , и исполняемый двоичный файл работает! Это также объясняется в вопросе компоновщика ld:Опция --whole-archive

Теперь мне нужно объединить все 26 lib*.a в одну статическую библиотеку liball.a.Кроме того, благодаря stackoverflow, приведенный ниже MRI script.mri успешно выдает liball.a с помощью команды ar -M < script.mri

create liball.a
addlib liba.a
addlib libb.a
addlib libc.a
addlib libd.a
... //omitted
addlib libz.a
save
end

Однако здесь возникает проблема при связывании с недавно объединенной статической библиотекой liball.a:

1) с опцией -Wl,--whole-archive -lall -Wl,--no-whole-archive -lpthread -lm -ldl -lrt -fopenmp FAILS !!Он генерирует тысячи multiple defined symbols error или undefined symbols error !!

2) без опции -Wl,--whole-archive команда link с -lall -lpthread -lm -ldl -lrt -fopenmp успешно создала исполняемый двоичный файл.Тем не менее, двоичный файл не может выполнить , сообщая об ошибке кода регистрации устройства.Я понимаю, что это вызвано некоторым кодом инициализации ЦП, удаляемым при компоновке.Ниже приведена подробная ошибка

 p INTERNAL ASSERT FAILED at ../c10/core/impl/DeviceGuardImplInterface.h:132, please report a bug to PyTorch. DeviceGuardImpl for cpu is not available (getDeviceGuardImpl at ../c10/core/impl/DeviceGuardImplInterface.h:132)

Этот вопрос также упоминается здесь https://github.com/pytorch/pytorch/issues/14367

Один из способов ее устранения - использование выборочной регистрации.Может ли кто-нибудь поделиться более подробной информацией по этому вопросу?

Этот вопрос НЕ является дубликатом Как объединить две статические библиотеки "ar" в одну? Метод сценария MRI получен по наибольшему голосованиюОтвет по вышеуказанной ссылке, и он не работает.Пожалуйста, удалите дубликат отметки, чтобы люди могли внести свой вклад.Благодаря.

...