c - Prueba Erlang NIF-OS X Lion
gcc erlang-nif (3)
Intente utilizar estos indicadores al compilar su nif en lugar de -shared
-bundle -flat_namespace -undefined suppress
Estoy intentando compilar la prueba NIF de Erlang ( http://www.erlang.org/doc/man/erl_nif.html ) en Mac OS X Lion. No puedo hacer que compile. ¿Me falta una bandera del compilador? Aquí está el error que recibo:
Computer:~ me $ gcc -fPIC -shared -o niftest.so niftest.c -I /usr/local/Cellar/erlang/R14B02/lib/erlang/usr/include/
Undefined symbols for architecture x86_64:
"_enif_make_string", referenced from:
_hello in ccXfh0oG.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
También probé esto con -m32
pero dice que tampoco hay arquitectura i386.
¡Gracias!
Parece que su problema no es la arquitectura, sino el símbolo indefinido _enif_make_string
, lo que significa que tiene que vincularse con su biblioteca enif
, sea lo que sea, utilizando la opción -l
. Además, ha pasado mucho tiempo desde que construí una biblioteca compartida para OS X, pero creo que el indicador correcto para usar es -dynamiclib
y no- -shared
, y no es necesario tener un espacio después de -I
.
para Erlang de 64 bits, lo siguiente funciona para mí:
gcc -undefined dynamic_lookup -dynamiclib niftest.c -o niftest.so /
-I /usr/local/Cellar/erlang/R14B02/lib/erlang/usr/include