2017-08-15 99 views
0


我正在使用基本上是运行openwrt Linino的arduino Yun的物联网相关项目的dragino产品。我从arduino部分获取数据,并在openwrt部分的C程序中使用libcurl(和HTTPS)将json发送到Firebase DB。
我设法设置了AR9331的交叉编译工具链,我可以编译依赖于libc的简单程序。不过,我需要交叉编译带有ssl支持的libcurl,才能使用HTTPS将数据发送到firebase。这意味着我需要交叉编译openssl。但是,我不确定我必须将哪个选项传递给配置脚本才能正确设置它。我可以从openssl和curl编译一个静态库,以便我的程序有任何依赖性吗?或者这样做是不好的做法?
为A9331交叉编译libcurl和openssl

在我最后一次尝试编译openssl的:

./Configure --prefix=$(realpath $LIBPATH)/openssl linux-mips32 

其中$ LIBPATH是我在工具链11b的位置。 使得返回如下:

apps/speed.o: In function `speed_main': 
speed.c:(.text+0x4424): undefined reference to `AES_set_encrypt_key' 
speed.c:(.text+0x443c): undefined reference to `AES_set_encrypt_key' 
speed.c:(.text+0x4454): undefined reference to `AES_set_encrypt_key' 
speed.c:(.text+0x7530): undefined reference to `AES_encrypt' 
speed.c:(.text+0x7544): undefined reference to `AES_encrypt' 
./libcrypto.so: undefined reference to `AES_set_decrypt_key' 
./libcrypto.so: undefined reference to `getcontext' 
./libcrypto.so: undefined reference to `setcontext' 
./libcrypto.so: undefined reference to `makecontext' 
./libcrypto.so: undefined reference to `AES_decrypt' 
collect2: error: ld returned 1 exit status 
Makefile.shared:180: recipe for target 'link_app.gnu' failed 

我如何编译OpenSSL的为AR9331?如果我尝试添加主机标志,则我的架构无法识别。

编辑:也许避免依赖关系问题的最佳方法是创建一个ipkg包(openwrt包管理器)
我会尝试它并通知您这是否可行。

+0

@FilipKočica如果你编辑的东西,请认真做好。 '
'标签在普通文本中不会受到伤害,但它们在代码块中可见。另外,如果代码块不是实际代码,则使用'<! - language:none - >'。 –

回答

0

默认情况下,这些软件包应该存在于Openwrt中。 你有没有试过用opkg下载它们?也许你必须检查你是从哪个回收站购买的。

作为最后的手段,您可以下载OpenWrt源代码并构建这两个软件包,然后获取.ipkg到您的设备,OpenWrt构建系统负责获取工具链并为您构建一切。