LINUX.ORG.RU

Использовать Библиотеку для ARM на системе x86?

 , , , ,


0

4

Как в своей программе использовать библиотеку написанную для ARM процессора, на Windows или Ubuntu?

Требуется написать программу, которая вызывает несколько функций из SO библиотеки (которая используется в Android) Программу напишу, а как запустить на процессоре Персонального компьютера? Какой то эмулятор придется использовать?


Ответ на: комментарий от aiqu6Ait

Такой вариант не подходит, библиотеки могут быть немного разные, но количество и тип параметров одинаковые. Алгоритм обработки данных может изменятся от версии к версии, вот поэтому и требуется запуск нетронутых функций из библиотеки.

P.S. изначально так и сделал, переписал несколько функций под Windows, и использовал.

Devill
() автор топика
Последнее исправление: Devill (всего исправлений: 1)
Ответ на: комментарий от phoenix

qemu-user

Пользовался этой штукой, раз оно не программу+библиотеку эмулирует? Может транслировать и SO-шки??? O_o То есть x86 программа и x86/arm набор библиотек?

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

Начни писать IPC сервис к библиотеке. Пока ты не считаешь микросекунды, разницы не увидишь даже при доступе к отдельным функциям, ну а виртуалку подходящую, уверен, тебе в этом треде посоветуют.

faq2
()
Ответ на: комментарий от I-Love-Microsoft

вполне возможно, что оно и так умеет. Но самый простой способ может быть сделать arm-бинарь, который грузит библиотеку через dlopen(), потом дергать этот бинарь через system()

phoenix ★★★★
()
Ответ на: комментарий от phoenix

Да не, не может qemu уметь в такое. ABI разный, одна и та же структура может быть представлена по-разному, а дальше указатели на структуры в аргументах… Вариант только 1 – руками писать IPC обёртку.

snizovtsev ★★★★★
()

Откуда вы знаете что библиотека на C++? Вот там надо взять исходники и собрать под нужную архитектуру. Заодно и легальность использования будет обеспечена.

Shushundr ★★★
()
Ответ на: комментарий от faq2

Зашёл, чтобы написать одно слово:

IUnknown

If you catch my meaning. :)

Начни писать IPC сервис к библиотеке.

Тоже думаю, что без [самописной] маршаллирующей обёртки, протаскивающей вызовы по сети внутрь контейнера, эмулирующего arm, ни хрена не выйдет.

dimgel ★★★★★
()

в первом-же сообщении ответили верно.

какой нафик IUnknown и IPC ?

double foo(double *arr,size_t arr_size) - прокиньте ARM32 <=> amd64;

и это ещё разрядность параметров совпадает и можно понять сколько копируется туда обратно..

застрелиться писать такие оплётки, быстрее и дешевле портировать библиотеку из ARM в x86_64 или всю верхнюю «мега-систему» в малинку :-)

Или сделайте уже «COM с человеческим лицом», чего кстати в Linux категорически нехватает

MKuznetsov ★★★★★
()
Ответ на: комментарий от MKuznetsov

double foo(double *arr,size_t arr_size) - прокиньте ARM32 <=> amd64;

Ну… Поскольку arr – in/out, то весь массив туда, потом весь массив обратно. А кто обещал, что будет легко? Жизнь вообще боль.

UPD. А вот если бы ты привёл пример с какими-нибудь файловыми дескрипторами – вот тут уже мне ответить было бы нечего. =) Посадка в лужу в чистом виде. :)

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 1)
Ответ на: комментарий от phoenix

Так и сделал в приложении для андроид, через dlopen() загружаю свою либу и уже из нее дёргаю функции из чужой либы, но для этого требуется андроид, который запускает апк с нужными либами в том числе и с моей самописной либой. Так вот появилось желание запустить Эту либу + исполняемый файл, который будет из либы дергать функции.

Devill
() автор топика
Ответ на: комментарий от Devill

Только как запускать это дело для настольного ПК, вот в чём вопрос, т.к. либа для arm.

(компиллятор для arm/x86 Win/Lin все настроено и работает)

Devill
() автор топика
Последнее исправление: Devill (всего исправлений: 1)