golang gcc c ++ Существующая статическая библиотека не может быть использована при создании объекта PIE; перекомпилировать с -fPIC - PullRequest
0 голосов
/ 30 июня 2019

Я пытался связать существующую библиотеку C ++, чтобы перейти код.Библиотека C ++ имеет только статическую библиотеку и заголовочный файл, без исходного кода.

Я использовал swigc для генерации libfoo.go и написал простой libb.go для сборки этой библиотеки.Это хорошо работало на Ubuntu 16.04 с gcc-6 ранее.

Однако, как только я обновился до Ubuntu 18, и даже с более старыми go1.9 и gcc-6, которые раньше работали, я получаю следующую ошибку:

/usr/bin/ld: ./lib/libfoo.a(parser.o): relocation R_X86_64_32S against symbol `xmlSAX2IgnorableWhitespace' can not be used when making a PIE object; recompile with -fPIC
/usr/bin/ld: ./lib/libfoo.a(tree.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a PIE object; recompile with -fPIC

У меня естьпонизил и компилятор, и gcc до версии, которая раньше работала.

Ниже приведен libb.go, который работал

/*
#cgo CXXFLAGS: -std=c++11 -D_GLIBCXX_USE_CXX11_ABI=0 -w
#cgo CFLAGS: -I${SRCDIR}/include -w
#cgo LDFLAGS: -Wl -rpath,./lib, -L${SRCDIR}/lib -l:libfoo.a  -l:libxml2.a 
*/
import "C"

Что мне сделать, чтобы это исправить?Я искал, и мне кажется, что мне нужно перекомпилировать эту статическую библиотеку, что в моем случае невыполнимо.Я попытался передать параметр -no-pie в LDFLAGS, который тоже не работал.

...