У меня такая же проблема. По-видимому, -static - это не то же самое, что -Bstatic. Я перешел на -Bstatic и все заработало.

я есть общая библиотека, используемая другим приложением вне моего контроля, для которого требуются объекты * .so. Моя библиотека использует sqlite3, который должен быть статически связан с ней (мне абсолютно необходим автономный бинарный файл).

Когда я пытаюсь скомпилировать и связать свою библиотеку:

-fpic -flto -pthread -m64
-flto -static -shared

Я получаю следующую ошибку:

/usr/bin/ld: /usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/crtbeginT.o: relocation R_X86_64_32 against `__DTOR_END__' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/gcc/x86_64-unknown-linux-gnu/4.6.1/crtbeginT.o: could not read symbols: Bad value
collect2: ld returned 1 exit status

Что такоеперекомпилировать с -fPIC относится к? Мой код или ЭЛТ?

Я уже пытался скомпилировать мой объект с -fPIC с тем же результатом.

Благодарю.

РЕДАКТИРОВАТЬ:

Проблема, похоже, не связана с SQLite3.

Я написал простую библиотеку с одной строкой, которая ничего не делает, которая компилирует и ссылается следующим образом:

g++ -c -fPIC -o bar.o bar.cpp
g++ -shared -o bar.so bar.o

но не так:

g++ -c -fPIC -o bar.o bar.cpp
g++ -static -shared -o bar.so bar.o

Кажется, проблема связана с ЭЛТ (crtbeginT.o). Я должен перекомпилировать GCC - с рис. Или что-нибудь?

Ответы на вопрос(3)

Ваш ответ на вопрос