全部产品
云市场

目标系统为32位Linux

更新时间:2019-03-15 17:30:35

使用make方式编译

如果您编译SDK是在一台安装了32位 Linux 的机器上, 那么参考 目标系统为64位Linux 的步骤, 即可得到32位的库和例程

如果您是在安装了64位 Ubuntu16.04 的机器上, 需要编译出32位的库, 请按照下文操作

安装32位工具链

  1. sudo apt-get install -y libc6:i386 libstdC++6:i386 gcc:i386

修改平台配置文件

  1. vim src/board/config.ubuntu.x86

增加如下一行

  1. CONFIG_ENV_CFLAGS += -m32

比如:

  1. cat src/board/config.ubuntu.x86
  2. CONFIG_ENV_CFLAGS += \
  3. -Os -Wall \
  4. -g3 --coverage \
  5. -D_PLATFORM_IS_LINUX_ \
  6. -D__UBUNTU_SDK_DEMO__ \
  7. ...
  8. ...
  9. CONFIG_ENV_LDFLAGS += -lpthread -lrt
  10. CONFIG_ENV_LDFLAGS += -m32
  11. OVERRIDE_STRIP := strip

选择平台配置

  1. make reconfig
  2. SELECT A CONFIGURATION:
  3. 1) config.macos.make 3) config.ubuntu.x86
  4. 2) config.rhino.make 4) config.win7.mingw32
  5. #? 3

编译

  1. make

获取二进制库

  1. cd output/release/lib
  2. ls

其中有三个主要产物, 它们都是32位架构的:

产物文件名 说明
libiot_hal.a HAL接口层的参考实现, 提供了 HAL_XXX() 接口
libiot_sdk.a SDK的主库, 提供了 IOT_XXX 接口和 linkkit_xxx() 接口
libiot_tls.a 裁剪过的 mbedtls, 提供了 mbedtls_xxx() 接口, 支撑 libiot_hal.a

获取可执行程序

  1. cd output/release/bin
  2. ls

其中有两个主要产物, 它们都是32位架构的:

产物文件名 说明
linkkit-example-solo 高级版(旧版API)的例程, 可演示 linkkit_xxx() 接口的使用
mqtt-example 基础版的例程, 可演示 IOT_XXX() 接口的使用

可以用如下方式验证, 注意 file 命令的输出中, 已经显示程序都是32位的了(ELF 32-bit LSB executable)

  1. file output/release/bin/*
  2. output/release/bin/linkkit-example-countdown: ELF 32-bit LSB executable, Intel 80386, ... stripped
  3. output/release/bin/linkkit-example-sched: ELF 32-bit LSB executable, Intel 80386, ... stripped
  4. output/release/bin/linkkit-example-solo: ELF 32-bit LSB executable, Intel 80386, ... stripped
  5. output/release/bin/linkkit_tsl_convert: ELF 32-bit LSB executable, Intel 80386, ... stripped
  6. output/release/bin/mqtt-example: ELF 32-bit LSB executable, Intel 80386, ... stripped
  7. output/release/bin/mqtt-example-multithread: ELF 32-bit LSB executable, Intel 80386, ... stripped
  8. output/release/bin/mqtt-example-rrpc: ELF 32-bit LSB executable, Intel 80386, ... stripped
  9. output/release/bin/ota-example-mqtt: ELF 32-bit LSB executable, Intel 80386, ... stripped
  10. output/release/bin/sdk-testsuites: ELF 32-bit LSB executable, Intel 80386, ... stripped
  11. output/release/bin/uota_app-example: ELF 32-bit LSB executable, Intel 80386, ... stripped

使用cmake方式编译

修改 CMakeLists.txt 文件

在默认的文件中修改CFLAGS, 加入-m32

  1. SET (CMAKE\_C\_FLAGS " -Iexamples -Os -Wall")

改成

  1. SET (CMAKE\_C\_FLAGS " -Iexamples -Os -Wall -m32")

从 CMakeLists.txt 构建makefile

  1. mkdir ooo
  2. cd ooo
  3. cmake ..

编译

  1. make -j32

产物

  1. ~/srcs/iotx-sdk-c/ooo\$ ls
  2. bin CMakeCache.txt CMakeFiles cmake\_install.cmake examples lib Makefile src tests

可执行程序在 bin/ 目录下:

  1. ls bin/
  2. linkkit-example-countdown linkkit-example-sched linkkit-example-solo linkkit\_tsl\_convert
  3. mqtt-example mqtt\_example\_multithread mqtt\_example\_rrpc ota-example-mqtt uota\_app-example

可以用如下方式验证, 注意 file 命令的输出中, 已经显示程序都是32位的了(ELF 32-bit LSB executable)

  1. file ooo/bin/\*
  2. ooo/bin/linkkit-example-countdown: ELF 32-bit LSB executable, Intel 80386, ... stripped
  3. ooo/bin/linkkit-example-sched: ELF 32-bit LSB executable, Intel 80386, ... stripped
  4. ooo/bin/linkkit-example-solo: ELF 32-bit LSB executable, Intel 80386, ... stripped
  5. ooo/bin/linkkit\_tsl\_convert: ELF 32-bit LSB executable, Intel 80386, ... stripped
  6. ooo/bin/mqtt-example: ELF 32-bit LSB executable, Intel 80386, ... stripped
  7. ooo/bin/mqtt-example-multithread: ELF 32-bit LSB executable, Intel 80386, ... stripped
  8. ooo/bin/mqtt-example-rrpc: ELF 32-bit LSB executable, Intel 80386, ... stripped
  9. ooo/bin/ota-example-mqtt: ELF 32-bit LSB executable, Intel 80386, ... stripped
  10. ooo/bin/sdk-testsuites: ELF 32-bit LSB executable, Intel 80386, ... stripped
  11. ooo/bin/uota\_app-example: ELF 32-bit LSB executable, Intel 80386, ... stripped

二进制库在 lib/ 目录下:

  1. ls lib/
  2. libiot\_hal.so libiot\_sdk.so libiot\_tls.so