Estoy usando Clang++ 10 en Ubuntu 20.04 para compilar una cierta biblioteca compartida que se cargará dentro del programa principal, y después de integrarla recientemente con ghc::filesystem (para una implementación de sistema de filesystem compatible con C++11), al iniciar el programa surge un error de enlace de carga de biblioteca: undefined symbol: _ZNSt3_V215system_categoryEv .
Descubrí que el proceso de vinculación del tiempo de compilación apunta a STD a la implementación interna más reciente del espacio de nombres std::_v2 , desde el sistema libstdc++ , como he verificado dos veces:
adrian@PC-Adrian:~$ strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep system_category _ZSt15system_categoryv _ZNSt3_V215system_categoryEv El programa (un servidor de juegos) envía una libstdc++ más antigua incrustada en su directorio bin , con el resultado de búsqueda de este símbolo:
adrian@PC-Adrian:~/steamcmd/server_base/bin$ strings libstdc++.so.6 | grep system_category _ZSt15system_categoryv Entonces, la biblioteca está buscando el símbolo std::_V2::system_category() en lugar del supuestamente más antiguo std::system_category() .
Dado que libstdc++ del sistema ya proporciona el antiguo símbolo STD, ¿podría resolverse fácilmente este problema con cualquier indicador del compilador o algo así? Intenté pasar -D_GLIBCXX_USE_CXX11_ABI=0 (como percibí que podría hacerlo) sin éxito. Aunque podría obtener más errores de símbolos faltantes después de arreglar este.