recebendo erro “recompile com -fPIC”

3

Depois de ./configure asterisco no CentOS eu digite make command mas recebendo 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 esse ./configure CFLAGS=-fPIC , mas recebi o mesmo erro acima.

    
por Bilal 26.02.2013 / 22:49

1 resposta

3

Neste ponto do asterisco, você está tentando construir uma biblioteca dinâmica. Como essa biblioteca dinâmica pode ser carregada em qualquer local da memória, tudo precisa ser relocável. A flag -fPIC significa Position Independent Code, o código é feito para ser independente da localização da carga - carregada em qualquer lugar.

Como parte deste asterisk dynamic lib build, ele está tentando trazer o interpretador Lua. Uma vez que está trazendo para uma biblioteca dinâmica, precisa de tudo compilado PIC. Mas você está usando uma biblioteca estática de lua, que não foi construída com o -fPIC. Ele rejeita isso, já que os objetos lua na biblioteca estática não podem ser realocados.

BTW: é por isso que adicionar -fPIC à compilação do asterisco não ajudará. Não são seus objetos de código de asterisco que são incompatíveis (o 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 você já tem sinalizadores de código relocáveis, como -fPIC, para os objetos de asterisco que você está tentando reunir naquele ponto.

Eu vejo três soluções.

  • Uma é soltar lua da sua construção. Se você não precisa especificamente e estava pensando mais que "isso pode ser divertido para brincar mais tarde" você pode e não perder os recursos desejados.

  • Outra é obter uma versão dinâmica de liblua, liblua.so , uma que possa ser referenciada em sua construção de asterisco. Eu não conheço sua distro, então não posso dizer como consegui-lo.

  • O outro, mais problemático, é reconstruir lua e liblua.a com -fPIC. Você teria problemas de compatibilidade, talvez a partir de flags de construção inconsistentes (o que você fez e o que mais está no disco), então acho que encontrar um liblua.so para corresponder à sua lua atualmente construída é a melhor opção.

Se você encontrar liblua.so, você pode querer olhar para o sinalizador de vinculação '-rpath' para isso, especificamente '-Wl, -rpath, / path / to / lua / libs'

    
por 26.02.2013 / 23:15