Basado en esta pregunta , recibo un mensaje de error ...
collect2: fatal error: ld terminated with signal 6 [Abgebrochen] compilation terminated. /usr/bin/ld: ld: wcsrtombs.c:99: __wcsrtombs: Zusicherung »data.__outbuf[-1] == '\0'« nicht erfüllt. ...al intentar vincular una biblioteca compartida pero configurar LC_ALL=C no resuelve el problema en mi caso.
Estoy en un Linux Mint 17.3 (Cinnamon) alemán. Mi proyecto se compila con CMake 2.8.4 (repositorio nativo). El compilador es g ++ 5.3.1 (repositorio xenial de Ubuntu).
El comando de compilación para todas las fuentes se ve así:
/usr/bin/c++ -D_USE_MATH_DEFINES -Dfluag_EXPORTS -g -fPIC -I/home/youka/Schreibtisch/Projekte/FLuaG/build/src -I/usr/include/luajit-2.0 -I/usr/local/include -Wall -Wextra -pedantic -Wredundant-decls -Wunreachable-code -Wmissing-include-dirs -Wswitch-enum -Wno-missing-field-initializers -std=c++11 -mmmx -o CMakeFiles/fluag.dir/main/FLuaG.cpp.o -c /home/youka/Schreibtisch/Projekte/FLuaG/src/main/FLuaG.cppComando de enlace que causa error:
/usr/bin/c++ -fPIC -g -shared -Wl,-soname,libfluag.so -o libfluag.so CMakeFiles/fluag.dir/lualibs/utf8.cpp.o CMakeFiles/fluag.dir/lualibs/mathx.cpp.o CMakeFiles/fluag.dir/lualibs/regex.cpp.o CMakeFiles/fluag.dir/lualibs/png.cpp.o CMakeFiles/fluag.dir/lualibs/geometry.cpp.o CMakeFiles/fluag.dir/lualibs/tablex.cpp.o CMakeFiles/fluag.dir/lualibs/filesystem.cpp.o CMakeFiles/fluag.dir/lualibs/tgl.cpp.o CMakeFiles/fluag.dir/lualibs/font.cpp.o CMakeFiles/fluag.dir/interfaces/vapoursynth.cpp.o CMakeFiles/fluag.dir/interfaces/public.cpp.o CMakeFiles/fluag.dir/main/FLuaG_image.cpp.o CMakeFiles/fluag.dir/main/FLuaG.cpp.o -Wl,-Bstatic -lluajit-5.1 -Wl,-Bdynamic -lGLEW /usr/local/lib/libglfw3.a -lGL -lpng -lzCompilar este proyecto con MinGW64 en Windows Vista funciona. La compilación de lanzamiento o depuración, con o sin SIMD, etc. no hace ninguna diferencia.
El mensaje de error me dice que en el archivo wcsrtombs.c (libgcc vinculado), línea 99, data.__outbuf[-1] == '\0' no está garantizado... lo que me confunde bastante.
Después de configurar el idioma del sistema en inglés, el mensaje de error de repente tuvo sentido:
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libluajit-5.1.a(ljamalg.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC /usr/lib/gcc/x86_64-linux-gnu/5/../../../x86_64-linux-gnu/libluajit-5.1.a: error adding symbols: Bad value El problema era -Wl,-Bstatic -lluajit-5.1 . Me vinculé al archivo .a que CMake esperaba que fuera una biblioteca estática. Cambiar a .so resolvió el problema.