Всем привет.
В общем такая ситуация. Есть некая библиотека libololo.a В этом архиве содержится множество .o файлов. В том числе для avx512.
lib_ololo_avx2.o
lib_ololo_avx512.a
В исходном файле lib_ololo_avx512.cpp имеется код в глобальном пространстве (вне функций и классов).
Есть два приложения, одно компилится через самописный Makefile библиотека линкууетя -L<path> -lololo
Это приложение нормально работает.
Второе приложение использует мейкфайл с инклудами мейкфайлов из еще одной либы, в результате флаги компилятора и линкера наполняются кучей опций.
Так вот, второе приложение падает до захода в main, оно и понятно - этот код должен(в глобальной области) должен выполнятся до main, а платформа имеет только avx2.
Но вопрос в том, почему первая програ имеет такие проблемы, а вторая нет. Очевидно, что за счет каких то опций.
Я пробовал добавлять -O2 к опциям, убирать -g, а так же убрал -export-dynamic из унаследованных опций. Это все не помогло.
Есть еще какие-нибудь идеи?
P.S.: Автором обеих внешних либ является сторонний разработчик, поэтому мне надо проанализировать ситуацию и выслать свою ревью. Поэтому советы вроде «убрать код из глобальной области», «убрать avx512 из сборки для avx» не канают=)