目录
1、编译工具和环境说明
2、基础编译tolua
3、以pbc为例子,添加第三方库
4、更新luaJit

大家好,我是阿赵。
之前分享过怎样正常编译基础版本的tolua。这次用添加pbc为例,看看怎样往tolua里面添加其他的第三方库。知道了方法之后,添加其他的第三方库或者自己写的代码,也是同样的道理。

一、下载pbc

这里我下载的是云风的pbc
下载地址
然后把pbc里面的内容复制到tolua文件夹内

二、编译Windows

这里可以有2种方式去添加pbc到tolua的编译里面。由于32位和64位的添加方式没有区别,所以就以64位为例。

1、先编译libpbc.a

修改build_win64.sh文件,

#!/bin/bash
# 64 Bit Version
mkdir -p window/x86_64cd luajit-2.1
mingw32-make cleanmingw32-make BUILDMODE=static CC="gcc -m64 -O2" XCFLAGS=-DLUAJIT_ENABLE_GC64
cp src/libluajit.a ../window/x86_64/libluajit.a
mingw32-make cleancd ..#build protobuf yunfeng ban pbc from https://github.com/cloudwu/pbc
cd pbc
mingw32-make BUILDMODE=static CC="gcc -m64 -O2" XCFLAGS=-DLUAJIT_ENABLE_GC64
cp build/libpbc.a ../window/x86_64/libpbc.a
mingw32-make clean
cd ..gcc -m64 -O2 -std=gnu99 -shared \tolua.c \int64.c \uint64.c \pb.c \lpeg.c \struct.c \cjson/strbuf.c \cjson/lua_cjson.c \cjson/fpconv.c \luasocket/auxiliar.c \luasocket/buffer.c \luasocket/except.c \luasocket/inet.c \luasocket/io.c \luasocket/luasocket.c \luasocket/mime.c \luasocket/options.c \luasocket/select.c \luasocket/tcp.c \luasocket/timeout.c \luasocket/udp.c \luasocket/wsocket.c \pbc/binding/lua/pbc-lua.c \-o Plugins/x86_64/tolua.dll \-I./ \-Iluajit-2.1/src \-Iluasocket \-Ipbc \-Ipbc/src \-lws2_32 \-Wl,--whole-archive window/x86_64/libluajit.a window/x86_64/libpbc.a -Wl,--no-whole-archive -static-libgcc -static-libstdc++

这时候执行编译,会先编译出一个libpbc.a,然后再编译出tolua.dll
主要修改

1.编译libpbc.a

#build protobuf yunfeng ban pbc from https://github.com/cloudwu/pbc
cd pbc
mingw32-make BUILDMODE=static CC="gcc -m64 -O2" XCFLAGS=-DLUAJIT_ENABLE_GC64
cp build/libpbc.a ../window/x86_64/libpbc.a
mingw32-make clean
cd ..

2.添加pbc-lua.c 编译

pbc/binding/lua/pbc-lua.c \

3.添加手动指定的pbc代码路径

 -Ipbc \-Ipbc/src \

4.最终编译添加libpbc.a

 -Wl,--whole-archive window/x86_64/libluajit.a window/x86_64/libpbc.a -Wl,--no-whole-archive -static-libgcc -static-libstdc++

2、手动指定新增编译内容

修改build_win64.sh文件

#!/bin/bash
# 64 Bit Version
mkdir -p window/x86_64cd luajit-2.1
mingw32-make cleanmingw32-make BUILDMODE=static CC="gcc -m64 -O2" XCFLAGS=-DLUAJIT_ENABLE_GC64
cp src/libluajit.a ../window/x86_64/libluajit.a
mingw32-make cleancd ..gcc -m64 -O2 -std=gnu99 -shared \tolua.c \int64.c \uint64.c \pb.c \lpeg.c \struct.c \cjson/strbuf.c \cjson/lua_cjson.c \cjson/fpconv.c \luasocket/auxiliar.c \luasocket/buffer.c \luasocket/except.c \luasocket/inet.c \luasocket/io.c \luasocket/luasocket.c \luasocket/mime.c \luasocket/options.c \luasocket/select.c \luasocket/tcp.c \luasocket/timeout.c \luasocket/udp.c \luasocket/wsocket.c \pbc/binding/lua/pbc-lua.c \pbc/src/alloc.c \pbc/src/array.c \pbc/src/bootstrap.c \pbc/src/context.c \pbc/src/decode.c \pbc/src/map.c \pbc/src/pattern.c \pbc/src/proto.c \pbc/src/register.c \pbc/src/rmessage.c \pbc/src/stringpool.c \pbc/src/varint.c \pbc/src/wmessage.c \-o Plugins/x86_64/tolua.dll \-I./ \-Iluajit-2.1/src \-Iluasocket \-Ipbc \-Ipbc/src \-lws2_32 \-Wl,--whole-archive window/x86_64/libluajit.a -Wl,--no-whole-archive -static-libgcc -static-libstdc++

这次再执行编译,不会再出现libpbc.a,直接就出来了tolua.dll
主要修改:

1.添加pbc-lua.c编译

pbc/binding/lua/pbc-lua.c \

2.手动添加pbc代码编译

pbc/src/alloc.c \pbc/src/array.c \pbc/src/bootstrap.c \pbc/src/context.c \pbc/src/decode.c \pbc/src/map.c \pbc/src/pattern.c \pbc/src/proto.c \pbc/src/register.c \pbc/src/rmessage.c \pbc/src/stringpool.c \pbc/src/varint.c \pbc/src/wmessage.c \

3.手动指定pbc代码路径

-Ipbc \
-Ipbc/src \

这两种方式各有优缺点
第一种方式,好处是不需要逐个包含的文件,不怕漏文件,缺点是需要多一步生成libpbc.a的编译过程
第二种方式,好处是灵活处理,需要哪个文件就添加哪个文件,缺点是需要指定的文件多的时候,可能会出现错漏。
然后要注意一点,不管是哪种方式,我们都需要通过-I来指定包含程序的文件夹。这是因为,在源码的.c文件里面,会自己include很多其他的文件,这些文件如果不指定包含的路径,会出现找不到的现象。因为我这里是把pbc整个文件夹都拷贝进来了,里面有些文件是包含在pbc文件夹,有些文件是包含在pbc/src文件夹,所以我两个文件夹都包含进来。

其实也可以不用整个pbc项目源码拷贝进来,实际有用的是3个东西:
1.pbc-lua.c

它在binding/lua目录下
2.pbc.h

3.src文件夹

里面的所有内容。
如果需要用第二种手动添加编译内容的方法来编译,只需要把以上说的3种内容拷贝到tolua文件夹的pbc文件夹里面,然后在手动指定的时候,根据实际情况来填包含的文件就可以了。

三、编译安卓

安卓需要编译的内容,在tolua/android/jni/Android.mk文件里面指定

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE := libluajit
LOCAL_SRC_FILES := libluajit.a
include $(PREBUILT_STATIC_LIBRARY)include $(CLEAR_VARS)
LOCAL_FORCE_STATIC_EXECUTABLE := true
LOCAL_MODULE := tolua
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../luajit-2.1/src
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../pbc
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../pbc/srcLOCAL_CPPFLAGS := -O2
LOCAL_CFLAGS :=  -O2 -std=gnu99
LOCAL_SRC_FILES := ../../tolua.c \../../int64.c \../../uint64.c \../../pb.c \../../lpeg.c \../../struct.c \../../cjson/strbuf.c \../../cjson/lua_cjson.c \../../cjson/fpconv.c \../../luasocket/auxiliar.c \../../luasocket/buffer.c \../../luasocket/except.c \../../luasocket/inet.c \../../luasocket/io.c \../../luasocket/luasocket.c \../../luasocket/mime.c \../../luasocket/options.c \../../luasocket/select.c \../../luasocket/tcp.c \../../luasocket/timeout.c \../../luasocket/udp.c \../../luasocket/usocket.c \../../pbc/binding/lua/pbc-lua.c \../../pbc/src/alloc.c \../../pbc/src/array.c \../../pbc/src/bootstrap.c \../../pbc/src/context.c \../../pbc/src/decode.c \../../pbc/src/map.c \../../pbc/src/pattern.c \../../pbc/src/proto.c \../../pbc/src/register.c \../../pbc/src/rmessage.c \../../pbc/src/stringpool.c \../../pbc/src/varint.c \../../pbc/src/wmessage.c \LOCAL_WHOLE_STATIC_LIBRARIES += libluajit
include $(BUILD_SHARED_LIBRARY)

主要修改:

1.指定包含代码的路径

LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../pbc
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../pbc/src

道理和编译Windows一样,是为了让include的文件能在指定的文件夹里面被找到

2.手动指定需要编译的代码

         ../../pbc/src/alloc.c \../../pbc/src/array.c \../../pbc/src/bootstrap.c \../../pbc/src/context.c \../../pbc/src/decode.c \../../pbc/src/map.c \../../pbc/src/pattern.c \../../pbc/src/proto.c \../../pbc/src/register.c \../../pbc/src/rmessage.c \../../pbc/src/stringpool.c \../../pbc/src/varint.c \../../pbc/src/wmessage.c \

修改完Android.mk,就可以正常的编译安卓的so文件了。

编译tolua——3、以pbc为例子,添加第三方库相关推荐

  1. AndroidStudio权威教程 AS添加第三方库的6种方式(Jar module so等)

    点击项目设置按钮 依次选择 App > Dependencies 1. 直接搜索法 依次选择 + > Library dependency 这里的搜索一定要是全名的,不然搜不到哦 下图所表 ...

  2. 面向小白visual studio 2019 添加第三方库教程

    虽然我是个linux程序员,但偶尔会在windows上借用visual studio写点demo,因为比较方便,所以今天就教大家如何添加第三方库编写自己的demo程序. 1.项目–>属性 2.C ...

  3. VS2010中添加第三方库目录VC++ Directories

    VS2010取消了08之前在options里面添加第三方库目录的设置,新的设置方法如下: View->Property Manager, 在Property Manager框里面有Debug|W ...

  4. VS中添加第三方库及相对路径设置

    原文 VS中添加第三方库及相对路径设置 对于一些第三方的SDK,一般会包含头文件(*.h),静态库文件(*.lib)和动态库文件(*.dll). 1.  文件位置:为了提高程序的可移植性,将第三库放在 ...

  5. [Ubuntu] apt 添加第三方库

    1. 方法一:直接在 /etc/apt/sources.list 添加第三方库. $ sudo vi /etc/apt/sources.list在其中添加:deb http://archive.scr ...

  6. 如何安装CocoaPods,以便在Xcode中快速添加第三方库

    文章目录 1. 安装CocoaPods 2. 用CocoaPods来添加第三方库 CocoaPods 是一个负责管理 Xcode项目中第三方开源库的工具.CocoaPods项目源码 通过 CocoaP ...

  7. python添加第三方库

    一.pycharm交互操作添加第三方库 1.进去settings设置 2.检查环境中是否有lib 找到project interpreter 右边点击settings按钮 选择show all 确认环 ...

  8. apollo如何添加第三方库,以pylon为例

    1.在apollo/third_party/ 里面增加pylon文件夹 workspace.bazel """Loads the OpenCV library" ...

  9. OpenWRT 添加第三方库

    简介 在OpenWRT 中,它已经包含许多开源库,在make menuconfig -> Libraries 中可以看到,有很多库都已经添加了. 当要用的库在OpenWRT里找不到时,就需要自己 ...

最新文章

  1. 两台服务器实现会话共享
  2. [python opencv 计算机视觉零基础到实战] 三、numpy与图像编辑
  3. mysql my.ini位置错误_解决mysql导入数据量很大导致失败及查找my.ini 位置(my.ini)在哪...
  4. Java四大函数式接口
  5. 秒懂物理计算机出题规划,57张动图, 让你秒懂高中物理原理! 考试次次拿第一
  6. java里面怎么添加表约束_alter table添加表约束
  7. 设计师必备导航类网站,内有宝藏!
  8. cnn输入层_一文掌握CNN卷积神经网络
  9. sqlserver 中通配符%和_的使用
  10. [PBRT-V3]代码中的#define(持续更新)
  11. 彻底搞懂Bert模型
  12. js字符串截取函数slice()、substring()、substr()
  13. 一文告诉你市面上最火的游戏都是用什么引擎做的!!!
  14. Linux学习笔记(一):Linux介绍
  15. mpa和pis_有关压力单位pis、bar与Mpa换算
  16. php 评论插件,typecho插件:TeComment评论增强插件
  17. java excel 冻结_Java 冻结或解除冻结Excel中的行和列
  18. flash编译器错误查询表
  19. 程序员转行去做售前、咨询
  20. 10种食物 让你快乐每一天

热门文章

  1. java 超类调用子类_java – 从超类调用子类方法
  2. python元组对应相加_python两个元组相加
  3. web网页设计实例作业 ——中国水墨风的小学学校网站(6页) 专题网页设计作业模板 学校物静态HTML网页模板下载
  4. MediShares(MDS)宣布参与EOS超级节点竞选
  5. Chinese Treebank系列数据集划分,以及ctb转换成斯坦福标准数据集的完整代码
  6. 【DSP】XDS510PLUS的驱动安装
  7. 基于空间误差同质区的矢量电子地图快速纠偏算法 Fast Map Rectification Algorithm Based on Spatial Error Homogeneous Region...
  8. kubernetes:pods is forbidden: User “system:serviceaccount:dev:default” cannot create resource “pods”
  9. 5G+人工智能将带来什么?
  10. 跟周星驰的电影学做人