2015-12-06 1 views
0

Je suis en mesure de partager le même « espace de noms » pour deux bibliothèques différentes en utilisant luajit sous Linuxfonctions lua ffi partage l'espace de noms

A = ffi.load(ffi.os == "Windows" and "opengl32" or "GLESv2") 
B = ffi.load(ffi.os == "Windows" and "glfw3" or "glfw") 
C = B,A 

Faire cela me permet d'appeler des fonctions de soit bibliothèque de la variable C

Cependant, dans les fenêtres des fonctions dans la dernière bibliothèque A ne peut pas être trouvé (j'utilise le binaire luajit de https://luapower.com/)

Je suppose que les deux plates-formes doivent se comporter (si elle ne peut se faire sur les deux plates-formes (ce qui serait étrange) alors ni platfor m devrait le permettre?)

Est-ce un bug ou existe-t-il une méthode plus robuste pour faire ce que je tente?

+0

Je pense que glfw sous Linux doit relier dynamiquement les fonctions (de GLES) pour moi. C = B -, A fonctionne aussi, c'est-à-dire que je pense que C ne contient que des fonctions de la première bibliothèque .... (donc ce que j'essaie de faire ne fonctionne pas vraiment sur les deux plateformes!) –

+0

ffi.C et même C = ffi.C (après chargement avec global = true) mais windows ne semble pas aimer non plus ...? –

+0

'C = B, A' n'a pas de sens ... ou au moins il assigne' B' '' C' et rejette 'A'. – nobody

Répondre

1

Si je lis correctement the documentation, alors vous ne pouvez généralement pas accéder à toutes les bibliothèques via le même espace de noms. Sur les systèmes POSIX (Linux, BSD, etc.), vous pouvez appeler le ffi.load(name, true) pour rendre les symboles disponibles à partir de ffi.C. Il n'y a aucune mention de cela fonctionnant ou ne fonctionnant pas sur Windows, donc je suppose que cela ne fonctionnera pas là. Cela signifie que ce n'est pas un bogue et que la méthode la plus robuste que vous recherchez est d'accéder aux symboles de différentes bibliothèques via leurs espaces de noms de bibliothèques respectifs. (Pour exemple que cela signifierait l'accès aux fonctions opengl par A et fonctions glfw par B.)


Je suppose que les deux plates-formes doivent se comporter (si elle ne peut se faire sur les deux plates-formes (qui impair) alors ni la plate-forme doit permettre?)

il y a des tonnes de choses qui peuvent être faites d'une certaine façon sur Windows/Linux/Mac OS/BSD/..., mais fonctionne de manière totalement différente sur certains ou tous . La liaison dynamique est juste l'un d'entre eux. Il y en a beaucoup d'autres, y compris des choses simples comme le concept d'un répertoire contenant des fichiers - le concept existe sur toutes ces plateformes mais il n'y a pas d'API commune, et un wrapper de bas niveau (comme FFI de LuaJIT pour les liens dynamiques) quelques-unes des différences.