Статическая компоновка boost на x86_64
От: 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
Re: Статическая компоновка boost на x86_64
От: plastictown Норвегия  
Дата: 23.03.20 12:30
Оценка:
Пересобрал boost с флагом -fPIC и долго пытался понять, почему cmake нормально собирает библиотеки .so, а мой Makefile не хочет. Получается, флаги -static-libstdc++ и -static-libgcc работают нормально, а при попыте компоновки любой статической библиотеки, собранной, видимо, без -fPIC, все ломается, соответственно, флаг -static, который бы мне очень хотелось использовать, использовать не получится, если не собрать руками libc.

Неужели нет менее болезненного решения?
static link libc libstdc++ boost
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.