Статическая компоновка boost на x86_64
От: plastictown Россия vk.com/plastictown
Дата: 20.03.20 18:29
Оценка:
Доброго времени суток! Пытаюсь собрать .so библиотеку и максимально скомпоновать в нее все зависимости.

* Компиляция:

CXXFLAGS=-std=c++14 -fPIC -Wall -Weffc++ -O3
g++ $(CXXFLAGS) -c file.cpp


* Компоновка:

boost_path=/usr/lib/x86_64-linux-gnu
LIBS=$(boost_path)/libboost_system.a $(boost_path)/libboost_thread.a # and so on...
g++ $(CXXFLAGS) -o lib.so -shared file.o $(LIBS)


На 32-разрядных дистрибутивах debian/ubuntu/mint все ок,
на 64-разрядных компоновщик ругается матом:

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/7/crtbeginT.o: relocation R_X86_64_32 against hidden symbol `__TMC_END__' can not be used when making a shared object
/usr/bin/ld: /usr/lib/x86_64-linux-gnu/libboost_system.a(error_code.o): relocation R_X86_64_PC32 against symbol `_ZTVN5boost6system14error_categoryE' can not be used when making a shared object; перекомпилируйте с параметром -fPIC
/usr/bin/ld: final link failed: Некорректное значение


C libcryptopp.a точно так же.

В интернетах много обсуждений подобных вопросов, но решения я не нашел.
Существует ли возможность как-то повлиять на ситуацию или по рекомендациям компоновщика начать пересобирать все статические библиотеки с флагом -fPIC, и поможет ли это вообще?

Спасибо!
C++ boost static linker
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.