Error de enlace de C++ después de actualizar a Mac OS X 10.9 / Xcode 5.0.1
Después de actualizar a Mac OS X 10.9 / Xcode 5.0.1, líneas de comandos para crear una biblioteca compartida (.dylib) falló con varios símbolos indefinidos.
clang++ -dynamiclib -install_name test.dylib *.o -o test.dylib
Undefined symbols for architecture x86_64:
"std::allocator<char>::allocator()", referenced from:
_main in test.o
"std::allocator<char>::~allocator()", referenced from:
_main in test.o
"std::ostream::operator<<(std::ostream& (*)(std::ostream&))", referenced from:
_main in test.o
"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)", referenced from:
_main in test.o
"std::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string()", referenced from:
_main in test.o
"std::ios_base::Init::Init()", referenced from:
___cxx_global_var_init in test.o
"std::ios_base::Init::~Init()", referenced from:
___cxx_global_var_init in test.o
"std::cout", referenced from:
_main in test.o
"std::basic_ostream<char, std::char_traits<char> >& std::endl<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&)", referenced from:
_main in test.o
"std::basic_ostream<char, std::char_traits<char> >& std::operator<<<char, std::char_traits<char>, std::allocator<char> >(std::basic_ostream<char, std::char_traits<char> >&, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from:
_main in test.o
ld: symbol(s) not found for architecture x86_64
2 answers
La respuesta está ahí: https://mathematica.stackexchange.com/questions/34692/mathlink-linking-error-after-os-x-10-9-mavericks-upgrade
Hay dos implementaciones de la biblioteca estándar de C++ disponibles en OS X: libstdc++ y libc++. No son compatibles con binarios y libMLi3 requiere libstdc++.
En 10.8 y versiones anteriores libstdc++ se elige por defecto, en 10.9 libc++ se elige por defecto. Para garantizar la compatibilidad con libMLi3, tenemos que elegir libstdc++ manualmente.
Para hacer esto, agregue-stdlib=libstdc++ al comando de enlace.
Entrada relacionada: Compilar con Clang usando Libc++ undefined references
Editar : Después de algunas investigaciones parece que hay un vínculo entre el -mmacosx-version-min
y la elección del valor predeterminado libstd
. Si min version libstd es igual a libstdc++
, de lo contrario a libc++
. La solución a largo plazo es claramente utilizar -stdlib=libc++
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:13
Esas sugerencias no funcionaron para mí con Mac El capitán. Si tiene problemas similares después de actualizar a El Capitan, simplemente ejecute
xcode-select --install
Antes de intentar compilar
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-03 06:19:18