Intento usar las nuevas funciones de c ++ 1z en la cabeza del desarrollo dentro de gcc 6.0.
Si pruebo este pequeño ejemplo:
#include <iostream>
#include <experimental/filesystem>
namespace fs = std::experimental::filesystem;
int main()
{
fs::path p1 = "/home/pete/checkit";
std::cout << "p1 = " << p1 << std::endl;
}
Tengo:
/ opt / linux-gnu_6-20151011 / bin / g ++ --std = c ++ 1z main.cpp -O2 -g -o ir /tmp/ccaGzqFO.o: En la función \ `std :: experimental :: filesystem :: v1 :: __ cxx11 :: path :: path (char const (&) [36]) ': /opt/linux-gnu_6-20151011/include/c++/6.0.0/experimental/bits/fs_path.h:167: referencia indefinida a `std :: experimental :: filesystem :: v1 :: __ cxx11 :: path :: _ M_split_cmpts () ' collect2: error: ld devolvió 1 estado de salida
La versión gcc es la instantánea linux-gnu_6-20151011
¿Alguna sugerencia de cómo vincular las nuevas funciones de c ++ 1z?

c++ -lstd++fs main.cpp. Estoy utilizandogcc version 5.3.1 20151207 (Red Hat 5.3.1-2) (GCC)-lstdc++fstiene que estar al final de la línea (al menos después del archivo fuente). No entiendo por qué algunos-lxxxnecesitan estar al final y otros no.Si está utilizando cmake, agregue la siguiente línea a
CMakeLists.txt:Para que cmake pueda vincularse con la biblioteca correspondiente.
fuente
target_link_libraries(hello_world_ stdc++fs)y lo compilé.Con clang 4.0+, necesitas enlazar contra
libc++experimental.aAsegúrese de que está compilando con libc ++ (no libstdc ++) con -stdlib = libc ++ (como se menciona en los comentarios)
fuente
-stdlib=libc++orset(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")Aquí hay una demostración que podría ser útil para alguien en el futuro:
env:
el6,gcc/5.5.0Los siguientes son compilación y prueba. Las banderas son
-std=c++17-lstdc++fs:También funciona con banderas:
-std=c++11Lo siguiente tuvo error de compilación
_ZNSt12experimental10filesystem2v112current_pathB5cxx11Evfuente