Uma biblioteca .so é uma biblioteca compartilhada - exatamente o oposto de uma biblioteca estática. Se você compilar estaticamente uma instalação do PHP, você terá um único executável (muito grande), provavelmente chamado "php", mas não haverá arquivos .so.
Eu acredito que não é possível (ou pelo menos uma idéia muito ruim) compilar "estaticamente" um arquivo .so. A razão é que você estará efetivamente copiando centenas, se não milhares, de funções para o arquivo .so, o que não apenas o tornará enorme, mas também poderá causar erros quando a biblioteca for carregada. Por exemplo, se uma aplicação (como um servidor web) carrega a biblioteca C padrão com a função strcpy (), então ela carrega seu arquivo .so 'static' que também tem uma função strcpy (), ser um conflito. Você poderia contornar isso exportando cuidadosamente apenas os símbolos necessários ou usando dlopen () no aplicativo, mas na melhor das hipóteses você acabará com um arquivo maciço de tamanho grande que desperdiça muita memória.
O que você pode fazer é usar ldd
para selecionar todos os arquivos .so necessários para executar todas as extensões e colocá-los todos na mesma pasta do arquivo .so. Se você definir a variável de ambiente LD_LIBRARY_PATH
para esse diretório antes de executar um aplicativo, ele deverá selecionar o PHP e todas as suas dependências a partir dessa pasta. Isso não lhe daria a abordagem mágica de arquivo único, mas pelo menos permitiria que você contivesse tudo em uma pasta.