Скрыть
Передача данных из 32битной библиотеки в 64битную программу
Есть библиотека, написанная на фортране, в которой используется различные "умные" трюки вроде хранения в одном массиве integer, real и character. В результате она корректно работает только на 32битной архитектуре. Хочется написать к ней интерфейс в скриптовые языки, но у моей рабочей машины 64битная архитектура, и при попытке подлючения библиотеки dlopen справедливо возвращает NULL. Как-нибудь это можно обойти? Можно специфично для архитектуры: amd64, GNU/Linux, gcc/gfortran. Исходники библиотеки есть, но много править там не хочется.
Сейчас меня эта библиотека интересует только как интерфейс к бинарным файлам, производимым одной программой из её же комплекта поставки, поэтому я подумываю о возможности обмена данными через пайпы/сокеты или расшаривания области памяти между двумя процессами. Ни то, ни другое я раньше не делал (ну, с пайпами работал, но бинарные данные разных архитектур не передавал). Может, у кого-нибудь есть идеи попроще?
Re: Передача данных из 32битной библиотеки в 64битную программу
> Как-нибудь это можно обойти?
ИМХО нет. В пределах одного процесса нету никакой возможности смешивать 32 и 64 битные коды. Если есть исходник либы, лучше всего рассмотреть вопрос о перекомпилировании в таргет нужной битности.
> с пайпами работал, но бинарные данные разных архитектур не передавал
Передавать двоичные данные в такой ситуации любым способом, будь то через shared mem или потоки, весьма чревато багами. На одной из сторон придётся явно указать размер для всех типов данных, к которым обращаешся. Попробуй рассмотреть возможность передавать параметры туда и обратно в символьном виде. Будет, как сам понимаешь, несколько медленно, однако, судя по тому что всё равно используешь скриптовое, это не должно тебя напрячь. Не забывай, что в фортране функция может менять свои аргументы.
Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.13) Gecko/2009080315 Ubuntu/9.04 (jaunty) Firefox/3.0.13