2015-12-06 6 views
0

Я могу одну и ту же «пространства имен» для двух различных библиотек, использующих LuaJIT в LinuxLua FFI функции обмена имен

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

Делать это позволяет мне вызывать функции из любой библиотеки из переменной C

Однако в окнах функций в последней библиотеке А не может быть найден (я использую LuaJIT двоичный из https://luapower.com/)

Я думаю, обе платформы должны вести себя так же (если это не может быть сделано на обеих платформах (что было бы странно), то ни platfor m должно это позволить?)

Является ли это ошибкой или есть более надежный способ делать то, что я пытаюсь?

+0

Я думаю, что glfw в Linux должен динамически связывать функции (из GLES) для меня. C = B -, А также работает, т. Е. Я думаю, что C содержит только функции из первой библиотеки .... (так что я пытаюсь сделать, на самом деле не работает на любой платформе!) –

+0

в linux удалось использовать ffi.C и даже C = ffi.C (после загрузки с global = true), но окна, похоже, тоже не нравятся ...? –

+0

'C = B, A' не имеет смысла ... или, по крайней мере, присваивает' B' 'C' и выбрасывает' A'. – nobody

ответ

1

Если я правильно читаю the documentation, то вы не можете вообще обращаться ко всем библиотекам через одно и то же пространство имен.

В системах POSIX (Linux, BSD и т. Д.) Вы можете позвонить ffi.load(name, true), чтобы сделать символы доступными в пределах ffi.C. Там нет упоминания об этом, работающем или не работающем над окнами, поэтому я предполагаю, что это не сработает.

Это означает, что это не ошибка, и более надежный метод, который вы ищете, - это доступ к символам из разных библиотек через их соответствующие пространства имен библиотек. (Для примера это будет означать доступ к функциям OpenGL через A и glfw функций через B.)


Я думаю, обе платформы должны вести себя так же (если это не может быть сделано на обеих платформах (что бы нечетное), то ни платформа должна позволять это?)

Там тонны вещей, которые можно сделать каким-то образом на Windows/Linux/Mac OS/BSD/..., но работает совершенно по-разному на все или некоторые из них , Динамическое связывание является лишь одним из них. Есть много других, в том числе простых вещей, таких как концепция «каталога», содержащего файлы, - концепция существует на всех этих платформах, но нет общего API, а низкоуровневая оболочка (например, FFI LuaJIT для динамической компоновки), вероятно, будет раскрыта некоторые из различий.