Estoy sin preguntar acerca de CUANDO para vincular diferentes lenguajes de programación.Cómo combinar diferentes lenguajes de programación
Esta es una pregunta bastante general, pero personalmente estoy trabajando en Linux.
Lo que yo quiero entender es el proceso por el cual los diferentes lenguajes de programación pueden ser combinados , me encontré con un buen artículo sobre la combinación de C/C++/Fortran: http://www-h.eng.cam.ac.uk/help/tpl/languages/mixinglanguages.html.
Por lo que entiendo la mayoría de los compiladores realizan dos etapas: (¿posiblemente nombres de función)
traducir los archivos de idioma en archivos de objetos que contienen código máquina, pero aún contienen algunos símbolos
Vinculación los archivos de objeto juntos, solo en esta etapa, el Vinculador verifica que las funciones en los archivos de objeto sean invocables.
creo que el problema con la combinación de diferentes idiomas es renombrado de nombres que significa que los nombres de las funciones se cambian cuando se convierten en código objeto.
Las preguntas son:
No se puede de alguna manera descubrir los nombres de las funciones destrozados de antemano y que especifique de forma explícita en el lenguaje de programación o mejor, no hay un software que ya se hace eso?
No entiendo completamente cómo están vinculadas las bibliotecas dinámicas, pero ¿pueden los diferentes lenguajes interactuar con los mismos que los programas interactúan con las bibliotecas dinámicas?
p.s El objetivo principal es llamar a las funciones escritas en otro idioma.
Gracias por la respuesta, ¿hay alguna manera común de "decirle al compilador que use la convención de llamadas del otro idioma? "¿?" – fiftyeight
Esta es una gran respuesta, para aclarar, le agradecería si pudiera decirme si lo siguiente es correcto: solo la Convención ABI/Calling importa si puede unir diferentes objetos, si deseo tener un alto - lenguaje de nivel como Perl o PHP (que están escritos en C) pueden llamar a mi función, siempre que la función use el C ABI, funcionará. Solo necesito agregar el objeto compartido al archivo de configuración (como php.ini) o vincularlo de alguna otra manera. – fiftyeight
@fiftyeight, para Perl, eche un vistazo a ['Inline :: C'] (http://search.cpan.org/~sisyphus/Inline-0.48/C/C.pod). Siempre que use el C ABI, habrá una forma u otra de hacerlo funcionar para un determinado lenguaje de scripting en la mayoría de los casos. Las formas de hacerlo funcionar dependerán de los detalles de la situación. Pero tenga en cuenta que la mayoría de los lenguajes de scripting están escritos en C. Para los implementados en la parte superior de la JVM, tendrá que recurrir a las instalaciones de la JVM para la interoperación de código nativo (JNI y otras cosas). – Lumi