Lua独立与外部二进制程序

Lua独立与外部二进制程序

我正在LuaLaTex 中给我们写一个小程序。它的目的是生成具有给定 uuid 的 qr 码,qr 码打印在页面上,uuid 存储在 pdf 的元数据中。

尽管如此,我认为最好在texmf文件夹中包含一个可执行文件,以便由我的文档中的类文件调用。要生成我使用qrencode & convert此 lua 脚本(Linux)的二维码uuidqrcode.lua

#!/usr/bin/env lua 

function gen_qr_uuid ()
    local uuid = require 'uuid'
    -- uuid.seed(math.randomseed(os.time()))
    local encode = uuid()
    local name = encode
    local format = 'pdf'

    local qrencode = string.format(
        [[qrencode \
            --type=EPS \
            --output=%s.eps \
            --size=10 \
            --level=H \
            --margin=0 \
            --casesensitive \
            %s \
            ]], 
            name,
            encode)

    local convert = string.format(
        [[convert \
            %s.eps \
            %s.%s \
            ]],
            name,
            name,
            format)

    local rmeps = string.format("rm %s.eps", name)

    os.execute(qrencode)
    os.execute(convert)
    os.execute(rmeps)
end

for i=1, (arg[1] or 1) do
    gen_qr_uuid ()
end

要将这个脚本转换为独立的可执行文件,我luastatic与该脚本一起使用makeluaexec

#!/bin/sh
luastatic $1 `pkg-config --libs --cflags lua`

有了这个,我就有了一个可执行文件,但它仍然依赖于qrencode & convert,所以当我移动到另一台 Linux 机器时,必须安装这些工具。有没有办法将这些工具打包到我自己生成的可执行文件中?

答案1

是的。该qrencode程序只是一个包装libqrencode,并且该convert命令只是一个包装器图像魔术师。不要调用这些命令,而是直接从代码中调用库函数。绑定如https://github.com/isage/lua-imagickhttps://github.com/vincascm/qrencode对此很有用。然后调用时luastatic,传入相关的静态库即可。

相关内容