移植zmq流程--RealEvo下创建成功编译及测试

分析make.log

创建工程前,首先要明确要编出那些库,需要用到那些源文件。这就是之前保存make.log的原因。

创建工程:

将ubuntu内编译好的文件拖到win10环境下:

建对应c++工程:(app工程即可)

注意,一开始可以先选上costom makefile configuration,避免生成的libzmq.mk有问题,创完之后在取消。

接下来主要要改的就是libzmq.mk

Libzmq.mk解析:

target生产的目标文件的名字:

可以是libzmq.so,libzmq.a(因为当前编译的是库,所以不可以是libzmq)

Depend target:依赖目标类型

常用的有:application_mk,kernel_library_mk

源文件列表:格式如下

有些工程编一个库有几十上百个c文件,灵活利用notepad++中的替换功能可以快速整理出符合格式的所有的c文件,避免一行一行粘贴。

头文件列表:

#*********************************************************************************************************
# Header file search path (eg. LOCAL_INC_PATH := -I"Your header files search path")
#*********************************************************************************************************
LOCAL_INC_PATH := \
-I"src/zeromq_414/include" \
-I"src/zeromq_414/src" \
-I"src/zeromq_414/builds/msvc"

宏定义项:

#*********************************************************************************************************
# Pre-defined macro (eg. -DYOUR_MARCO=1)
#*********************************************************************************************************
LOCAL_DSYMBOL := \
-DHAVE_CONFIG_H \
-D_REENTRANT \
-D_GNU_SOURC \
-D_THREAD_SAFE \
-DZMQ_USE_EPOLL \
-DSYLIXOS

编译参数:

#*********************************************************************************************************
# Compiler flags
#*********************************************************************************************************
LOCAL_CFLAGS   := 
LOCAL_CXXFLAGS := -fPIC

依赖库及库路径:

#*********************************************************************************************************
# Depend library (eg. LOCAL_DEPEND_LIB := -la LOCAL_DEPEND_LIB_PATH := -L"Your library search path")
#*********************************************************************************************************
LOCAL_DEPEND_LIB      := 
LOCAL_DEPEND_LIB_PATH := 

其他配置项:

编译c++功能时开启对c++及c++异常的支持

OpenMP: open multi-processing 开启多线程编译的支持

 

注意及易错点:

  1. 生成的目标文件名要和depend target对应(app或库)
  2. 源文件一定要写全。使用notepad++进行文本处理完,再数遍,不要误删某行,导致各种奇怪的错误。
  3. 头文件路径,库文件,库文件路径,尽量不要有空格,中文。如果出错,注意看控制台实际输出的内容,不要过于相信.mk。
  4. 库文件链接时,注意顺序,一定要保证和linux下的连接顺序一致。不然就有可能编不过去。
  5. 路径中常用的几个宏:$(SYLIXOS_BASE_PATH)是base的路径,$(SYLIXOS_BASE_PATH)/..才是workspace的路径
  6. -D可以不指定对应值,但是-DAAA=0,不等于没定义AAA.
  7. 使用-j8 多线程编译时开openMP。
  8. 一般情况下不需要改源文件的内容,只要改src下的config.h文件,通过删减支持的宏定义即可。

Sylixos下fork的处理:

由于sylixos下不支持fork,所以要在一开始就尽量看看那些地方用到了fork。

解决方法:(zmq库中没有出现fork,就已之前移植的sshd为例)

把fork中的任务,在单独的函数内实现。

在另一个app中获取函数的地址和参数。通过执行这个app,实现fork的功能。

posix_spawn(&child_pid, "/apps/ssh/child", NULL, NULL, pcCmd, NULL);

 

测试:

移植的库应该经过充分的测试,可以先在模拟器上跑,再在不同平台的板子上跑。

先从读版本号,到实际使用,再到性能测试。

关于-fPIC

-fPIC 作用于编译阶段,

作用:告诉编译器产生与位置无关代码(Position-Independent Code),

产生的代码中,没有绝对地址,全部使用相对地址,故而代码可以被加载器加载到内存的任意位置,都可以正确的执行。这正是共享库所要求的,共享库被加载时,在内存的位置不是固定的。

non-PIC 与 PIC 代码的区别主要在于 access global data, jump label 的不同汇编的意义不同

详细的参考:

(14条消息) gcc编译参数-fPIC的一些问题_哒哒的博客-CSDN博客

其他:

注意测试用例中使用loaclhost时需要确保在/etc/hosts中有

127.0.0.1 loaclhost

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值