sombra
tengo un problema con la biblioteca del sistema de archivos, debería incluirse en el compilador c++ 17, después de 2 días intenté instalar gcc-7.0.2 en raspberry pi pero no funcionó, no pudo reconocer el comando gcc-7 o g++-7 o incluso -std=c++17
así que tuve que instalar g++-6 y gcc-6 usando apt-get install
de todos modos, después de instalar la versión 6, el compilador incluye c ++ 17. estoy usando bloques de código como IDE, tuve que agregar un nuevo compilador y agregar la opción -std=c++17 para habilitarlo, pero en el código principal cuando incluyo la biblioteca del sistema de archivos dice que no hay tal archivo o directorio.
mi pregunta es, ¿cómo puedo agregar el compilador c ++ 17 y su biblioteca (como el sistema de archivos) correctamente?
Galik
GCC v7
aun no implementa
#include <experimental/filesystem>
// for brevity
namespace fs = std::experimental::filesystem;
int main()
{
fs::path p = "/path/to/my/file"; // etc...
}
Esto también está disponible en GCC v6
.
Para vincular con la biblioteca, debe agregar -lstdc++fs
a la línea de comandos.
Nota: Puede haber algunas diferencias menores entre el actual Especificación técnica y el borrador final de
-
así que era correcto que gcc v7 aún no se completara, de todos modos, agregar el sistema de archivos/experimental funciona bien, gracias por eso.
– sombra
24 de agosto de 2017 a las 17:27
-
@sombra Soporte para
C++17
no está completo, no. Principalmente porqueC++17
aún no ha sido finalizado por el Comité de Normas ISO. Probablemente tomará algunos meses después de eso paraGCC
para convertirse en característica completa.– Galik
24 de agosto de 2017 a las 19:29
-
@Galik ¿Por qué GCC no estaría completo para cuando se publique C++ 17? El borrador de C++17 ha estado completo durante meses, y si estoy leyendo el proceso de estandarización cierto, no se publicará hasta algún tiempo después del 30 de octubre. Eso debería ser mucho tiempo, ya que son hecho con el lenguaje central y mayormente hecho con la biblioteca.
– Daniel H.
28 de agosto de 2017 a las 19:15
-
@DanielH Según los registros, el
std::filesystem
no llegó enGCC
Hasta quev8.1
que fue publicado enMay 2018
cual es más de 6 meses después de laC++17 Standard
fue publicado. Incluso entonces se consideró “experimental” Hasta queGCC v9.1
que fue publicado enMay 2019
.– Galik
21 de mayo de 2020 a las 10:56
-
Estoy usando GCC 9.3 en Ubuntu 20.04 y
<filesystem>
no funcionó (incluso con-std=c++17
bandera). Usar el experimental funcionó gracias a esta respuesta.– Sasan
15 de abril de 2021 a las 8:40
Primero debes echar un vistazo a Compatibilidad con C++17 en GCC
CCG 8
Biblioteca de tiempo de ejecución (libstdc++)
- Compatibilidad experimental mejorada para C++17, incluidas las siguientes características:
- Guías de deducción para admitir la deducción de argumentos de plantilla de clase.
std::filesystem
implementación.std::char_traits<char>
ystd::char_traits<wchar_t>
son utilizables en expresiones constantes.std::to_chars
ystd::from_chars
(solo para números enteros, no para tipos de punto flotante).
origen: https://gcc.gnu.org/gcc-8/cambios.html
CCG 9
Biblioteca de tiempo de ejecución (libstdc++)
- Compatibilidad mejorada con C++17, que incluye:
- La implementación de C++17 ya no es experimental.
- Algoritmos paralelos y
<execution>
(requiere Thread Building Blocks 2018 o posterior).<memory_resource>
.- Uso de los tipos y funciones en
<filesystem>
no requiere vinculación con-lstdc++fs
ahora.
El hecho de que el interruptor diga “C++17” no significa que implemente todos de C++17.
– Nicolás Bolas
24 de agosto de 2017 a las 17:10
Más concretamente, sólo puede aplicar la idioma partes. los biblioteca las partes están fuera del alcance del compilador.
– Ignacio Vázquez-Abrams
24 de agosto de 2017 a las 17:12
@IgnacioVazquez-Abrams: Bueno, los interruptores del compilador también se usan para activar las partes de la biblioteca, ya que están incluidos con el compilador en la distribución. Pero tiene razón en que libstdc++ se actualiza por separado de gcc.
– Nicolás Bolas
24 de agosto de 2017 a las 17:15
@Nicol No se actualiza por separado en absoluto: las versiones específicas de GCC están estrechamente vinculadas a instantáneas específicas de libstdc ++. La numeración de la versión funciona ligeramente diferente y ambas se desarrollan de forma semiindependiente (según lo permita la implementación de características del lenguaje en el compilador).
– rubenvb
22 de agosto de 2018 a las 14:28
@Rick, probablemente tengas dos, aunque el más nuevo debería funcionar como un reemplazo directo del anterior.
– rubenvb
27 de noviembre de 2018 a las 15:44