Расширение Google Chrome с использованием NaCL с внешней библиотекой
Я разрабатываю расширение Google Chrome, используя NaCL. Это довольно круто и легко в использовании, но у меня есть сомнения.
Моему расширению нужен GPGME (GnuPG Made Easy), поэтому я скомпилировал эту библиотеку с параметром --enable-shared и добавил библиотеку в файл.mnf:
{
...
"files": {
"libgpgme.so": {
"x86-64": {
"url": "libs/libgpgme.so"
},
"x86-32": {
"url": "libs/libgpgme.so"
}
}
...
}
Я также обновляю make-файл с опцией '-lgpgme', но когда я компилирую свой.nexe, у меня появляется следующее сообщение об ошибке: "libgpgme.so: файл не распознан: формат файла не распознан".
Итак, мои вопросы:
- Могу ли я использовать внешнюю библиотеку с моим проектом?
- Как я могу это сделать?
- Ура, Хосе
2 ответа
Поскольку внутренняя песочница Native CLient основана на проверке двоичного файла, вам необходимо скомпилировать libgpgme с помощью инструментов Native Client. Как правило, Native Client должен проверять любой код перед его выполнением, включая любые библиотеки, независимо от того, статически они или динамически связаны. Безусловно, самый простой способ создания двоичных файлов, которые могут быть проверены, - это использование компиляторов Native Client.
Портирование на Native Client: поскольку libgpgme использует автоинструменты и, в частности, configure, вам необходимо объявить им платформу NaCl, добавив такой раздел в части basic_machine файла config.sub, который должен находиться где-то в libgpgme. исходное дерево:
nacl*)
basic_machine=i686-pc
os=-nacl
;;
и добавление
-nacl*
в разделе ОС того же файла. Примером особо чистого порта является libogg. Вы можете увидеть весь патч на http://code.google.com/p/naclports/source/browse/trunk/src/libraries/libogg-1.1.4/nacl-libogg-1.1.4.patch. (Строго говоря, config.sub генерируется из configure.in, но зачастую более целесообразно редактировать config.sub.)
Портирование - это больше, чем этот первый шаг, поэтому некоторые руководства и указатели на существующие порты следуют, чтобы дать вам представление о том, как это делается.
Руководства. Для получения дополнительной информации по адресу https://developers.google.com/native-client/community/developers можно перенести несколько вариантов переноса. В частности, рассказ о XaoS по адресу https://developers.google.com/native-client/community/porting/xaos содержит небольшой раздел об автоинструментах.
Существующие порты: также существует хранилище на основе сообщества для Native Client, которое называется naclports. Он содержит несколько библиотек, которые уже были портированы, но, к сожалению, еще не libgpgme. Вы можете увидеть список библиотек в naclports по адресу http://code.google.com/p/naclports/source/browse/trunk/src/libraries/. Хотя он содержит полезные примеры того, как сделать порты, naclports не для слабонервных, поскольку он часто ломается и - учитывая, что он поддерживается на добровольной основе / с максимальными усилиями - может потребоваться время, чтобы исправить.
Сначала вам нужно портировать libgpgme в NaCl. Т.е. libgpgme должен быть скомпилирован компилятором NaCl, а не компилятором Linux.
GPGME использует configure. Так что портирование обычно выполняется передачей скриптов-оберток компилятором. Эти сценарии заменяют программы NaCl, созданные компилятором NaCl, сценарием, который вызывает их через sel_ldr. Таким образом, configure может запускать скомпилированные программы NaCl как обычные Linux.