Quão strong é a promessa de que .so.x.y.z existirá?

1

Eu tenho um aplicativo que requer o OpenCV 2.4.11 para vincular, portanto, no meu arquivo make , asseguro que eu use o seguinte padrão de sinalizador de vinculador:

-l:libopencv_core.so.2.4.11

Qual a robustez dessa suposição?

Meu problema específico é com minha própria máquina, o Ubuntu 14.04, que tem a v2.4.7 como padrão, então se eu usar apenas -lopencv_core , recebo a versão incorreta. Eu uso cv::fisheye , que é uma versão 2.4.11 ou recurso posterior, e find_package(OpenCV) do CMake não possui um recurso de especificação de versão.

    
por Ken Y-N 29.07.2016 / 02:02

1 resposta

2

Isso faz com que ele dependa de uma configuração de pacote específica (bastante frágil). Ele não seria executado em uma versão anterior ou posterior da biblioteca.

Se o seu aplicativo exigir algum recurso específico (que não pode ser verificado imediatamente pelo êxito / falha na vinculação), a abordagem usual é escrever algum código de inicialização que verifique a versão de lançamento da biblioteca (muitas, nem todas as bibliotecas uma função de versão ou variável global).

Por exemplo, o OpenCV (de acordo com Como determinar a versão do OpenCV ) tem uma função:

printf("OpenCV: %s", cv::getBuildInformation().c_str());

Outras leituras: documentação do OpenCV 2.4.10 para getBuildInformation :

Returned value is raw cmake output including version control system revision, compiler version, compiler flags, enabled modules and third party libraries, etc. Output format depends on target architecture.

    
por 29.07.2016 / 02:08