recebendo erro “recompilar com -fPIC”

recebendo erro “recompilar com -fPIC”

Após ./configureo asterisco no CentOS eu digito o comando make, mas recebo o seguinte erro

/usr/bin/ld: /usr/local/lib/liblua.a(lapi.o): relocation R_X86_64_32 against `luaO_nilobject_' can not be used when making a shared object; recompile with -fPIC /usr/local/lib/liblua.a: could not read symbols: Bad value

Eu tentei isso ./configure CFLAGS=-fPIC, mas obtive o mesmo erro acima.

Responder1

Neste ponto do asterisk, você está tentando construir uma biblioteca dinâmica. Como esta biblioteca dinâmica pode ser carregada em qualquer local de memória, tudo precisa ser relocável. A -fPICbandeira significa Código Independente de Posição, o código é feito para ser independente do local de carga - carregado em qualquer lugar.

Como parte desta construção de biblioteca dinâmica do asterisk, ele está tentando trazer o interpretador Lua. Como está sendo trazido para uma biblioteca dinâmica, ele precisa de tudo PIC compilado. Mas você está usando uma biblioteca estática de lua, que foinãoconstruído com -fPIC. Ele rejeita isso, uma vez que os objetos lua na biblioteca estática não podem ser realocados.

POR FALAR NISSO:é por isso que adicionar -fPICà compilação do asterisco não ajudará. Não são os seus objetos de código asterisco que são incompatíveis (que -fPIC pode afetar), mas liblua.a, especificamente os objetos transportados por liblua.a (por exemplo, lapi.o). Além disso, você está construindo uma biblioteca dinâmica nesse ponto e tenho certeza de que já possui sinalizadores de código relocáveis, como -fPIC, para os objetos asterisco que você está tentando reunir naquele ponto.

Vejo três soluções.

  • Uma é retirar lua da sua construção. Se você não precisa dele especificamente e está pensando mais que "pode ​​ser divertido brincar com isso mais tarde", talvez você consiga e não perca os recursos desejados.

  • Outra é obter uma versão dinâmica do liblua, liblua.soque possa ser referenciada na sua compilação do asterisco. Não conheço sua distro, então não posso dizer como obtê-la.

  • A outra, mais chata, é reconstruir lua e liblua.a, com -fPIC. Você teria problemas de compatibilidade, talvez devido a sinalizadores de construção inconsistentes (o que você fez e o que mais está no disco), então acho que encontrar um liblua.so que corresponda à sua lua atualmente construída é a melhor opção.

Se você encontrar liblua.so, você pode querer dar uma olhada no sinalizador do vinculador '-rpath' para isso, especificamente '-Wl,-rpath,/path/to/lua/libs'

informação relacionada