У меня есть статическая библиотека, скомпилированная с помощью gcc 3.4.3. Я хотел бы использовать ее в коде, который теперь будет скомпилирован с помощью gcc-4. Я смутно читал, что двоичные файлы gcc-3 и gcc-4 несовместимы и что библиотеку необходимо будет перекомпилировать, но просто хочу получить подтверждение этого. Разве нельзя использовать библиотеку gcc-3 с gcc-4?
совместимы ли двоичные файлы gcc-3 с gcc-4
Ответы (1)
Не всегда возможно заставить кого-то еще в организации или у поставщика обновить свою библиотеку до gcc 4, особенно если они отказались от нее.
Если C++: при условии, что они могут связываться, во время выполнения вы можете взорвать код шаблона стандартной библиотеки C++, который использует потоки, поскольку символы, сгенерированные g++ 4, разрешаются по сравнению с определениями, сгенерированными g++ 3.
Вы можете увидеть это предупреждение при связывании:
/usr/bin/ld: предупреждение: libstdc++.so.5, необходимый для (устаревшей статической библиотеки), может конфликтовать с libstdc++.so.6
Вот пример, в который вы можете попасть: деструктор базового класса ~basic_stringbuf() (фактически шаблон) может быть определен в вашем модуле, скомпилированном под g++ 3, который по ошибке вызывается деструктором ~basic_ostringstream() в libstdc++so.6, который вызывается скомпилированным модулем g++ 4. Ка-Бум.
Я попробовал compat-libstdc++-33, но мне не повезло.
Тем не менее, я по-прежнему связываю 32-разрядные библиотеки gcc 3 эпохи C со своими программами gcc 4.1.2 C++.