支持sqlcipher的NPM sqlite3

时间:2017-05-12 18:46:50

标签: c++ node.js npm sqlite ubuntu-16.04

我正在尝试使用sqlcipher支持交叉编译NPM Sqlite3。我正在使用Ubuntu 16.04交叉编译基于linux armv7的SOC(片上系统)。

所以我开始交叉编译OpenSSL来为arm构建sqlcipher。我成功地交叉编译的sqlcipher来生成一个静态库(libsqlcipher.a)。

现在我正在尝试获得项目的NodeJS方面。我需要sqlite和sqlcipher支持,为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

1 个答案:

答案 0 :(得分:0)

在第一个实例中,您应该检查最初创建libsqlcipher.a文件时是否正确应用了-fPIC(位置无关代码)标志。

在上面的输出中,看起来链接器正在使用以下文件: /home/Library/sqlcipher-master/.libs/libsqlcipher.a

运行命令

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

...并检查以文本

开头的输出开头附近的一行
RELOCATION RECORDS FOR

如果您看到此行,则库不包含与位置无关的代码。