2017-05-12 45 views
0

我想跨平臺編譯帶有sqlcipher支持的NPM Sqlite3。我正在使用Ubuntu 16.04爲基於linux armv7的SOC(系統芯片)進行交叉編譯。帶有sqlcipher支持的NPM sqlite3

所以我開始交叉編譯OpenSSL爲arm構建sqlcipher。我成功地將交叉編譯的sqlcipher生成了一個靜態庫(libsqlcipher.a)。

現在我正在嘗試獲取項目的NodeJS端。我需要支持sqlcipher的sqlite,爲arm編譯。我正在使用SOC SDK來構建至今。

我使用節點v4.6.1和npm v2.15.9進行交叉編譯。我確定我在Ubuntu上安裝了與SOC相同的版本。

我使用交叉編譯命令如下:

npm install sqlite3 --target_arch=arm --enable-static=yes --build-from-source --sqlite_libname=sqlcipher -fPIC --sqlite=home/onkar/Library/sqlcipher-master/.libs --verbose 

我導出libsqlcipher.a的位置LDFLAGS。當我嘗試交叉編譯時,出現以下錯誤。有人可以幫我解決這個錯誤嗎?

/home/linuximage/sdk/sysroots/x86_64-angstromsdk-linux/usr/libexec/arm-angstrom-linux-gnueabi/gcc/arm-angstrom-linux-gnueabi/5.2.1/real-ld: error: /home/Library/sqlcipher-master/.libs/libsqlcipher.a(sqlite3.o): requires unsupported dynamic reloc R_ARM_THM_MOVW_ABS_NC; recompile with -fPIC 
collect2: error: ld returned 1 exit status 
node_sqlite3.target.mk:129: recipe for target 'Release/obj.target/node_sqlite3.node' failed 
make: *** [Release/obj.target/node_sqlite3.node] Error 1 

請讓我知道如果你需要任何額外的信息,我會很樂意爲您提供相同。

感謝, Onkar

回答

0

在第一種情況下,你應該檢查libsqlcipher.a文件最初創建時是正確應用-fPIC(位置無關代碼)標誌。

在你上面的輸出,它看起來像連接使用文件在: /home/Library/sqlcipher-master/.libs/libsqlcipher.a

運行命令

objdump -r /home/Library/sqlcipher-master/.libs/libsqlcipher.a | more 

...然後檢查線靠近輸出開始與文本

RELOCATION RECORDS FOR 

開始如果你看到這條線,則庫不包含與位置無關的代碼。