2012-12-17 34 views
2

我正在使用NaCL開發Google Chrome擴展程序。這很酷很容易使用,但我有一個疑問。使用NaCL和外部庫的Google Chrome擴展程序

我的擴展需要GPGME(GnuPG的一點通),所以我編譯「--enable-共享」選項,庫和添加庫到.mnf文件:

{ 
    ... 
    "files": { 
     "libgpgme.so": { 
      "x86-64": { 
       "url": "libs/libgpgme.so" 
      }, 
      "x86-32": { 
       "url": "libs/libgpgme.so" 
     } 
    } 
    ... 
} 

我還更新使用選項「-lgpgme」的makefile,但是當我編譯我的.nexe時,我有以下錯誤:「libgpgme.so:文件無法識別:文件格式無法識別」。

所以,我的問題是:

  1. 我可以使用外部庫與我的項目?
  2. 我該怎麼做?

- 乾杯, 何塞

回答

3

由於Native CLient的內部沙箱依賴於對二進制文件的驗證,因此您需要使用Native Client工具編譯libgpgme。通常,Native Client需要在執行任何代碼之前驗證它,包括任何代碼庫,無論它們是靜態鏈接還是動態鏈接。到目前爲止,創建可驗證二進制文件的最簡單方法是使用Native Client編譯器。

移植到本機客戶端: 由於libgpgme使用自動工具,特別是配置,則需要通過文件config.sub的basic_machine部分添加這樣的部分NaCl的平臺發佈給他們,這應該某處駐留在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有幾個移植後的mortems。特別是,關於XaoS的https://developers.google.com/native-client/community/porting/xaos有關於自動工具的簡短部分。

現有端口: 此外,還有一個基於社區的Native Client存儲庫,稱爲naclports。它包含幾個已經移植過的庫,但不幸的是,它還沒有libgpgme。您可以在http://code.google.com/p/naclports/source/browse/trunk/src/libraries/處看到naclports中的庫列表。雖然它包含了如何做端口的有用示例,但naclports並不適合那些膽怯的人,因爲它常常會破壞,並且 - 由於它是以志願者/盡力而爲的方式維護的 - 可能需要一些時間才能修復。

+0

好的,謝謝你的解釋。我將嘗試將libgpgme移植到NaCL,但這很容易,因爲首先我需要移植依賴關係,比如libgpgme_error等等......但是我會嘗試;) – josecampos

+0

@West 39th:你可以在這裏看看我的問題http://stackoverflow.com/questions/23270979/how-to-use-ported-library-in-nacl-module。我不知道如何解決它。謝謝, –

1

您需要的端口libgpgme對NaCl第一。即libgpgme應該由NaCl編譯器編譯而不是Linux編譯器。

GPGME使用configure。所以移植通常是通過傳遞包裝腳本作爲編譯器來完成的。這些腳本將用NaCl編譯器生成的NaCl程序替換爲通過sel_ldr調用它們的腳本。這種配置可以像普通的Linux一樣運行編譯的NaCl程序。

相關問題