LuaLaTeX 找不到 C 模块,但 Lua 可以

LuaLaTeX 找不到 C 模块,但 Lua 可以

我的目录如下所示:

main.so
mainlua.lua
maintex.tex

其中main.so是一个用 C++ 编写的模块。


mainlua.lua包含以下代码:

package.cpath = package.cpath .. ";./?.so;"

local math = require "main"

int, res = math.integral("-1/2*x^2+x+4", -2, 4)

print(int)
print(res)

并执行

lua mainlua.lua

正确打印两个变量。


maintex.tex另一方面包含几乎相同的代码,即

\documentclass{article}

\usepackage{luacode}

\begin{document}

\begin{luacode}    
    package.cpath = package.cpath .. ";./?.so;"
    local math = require "main"

    int, res = math.integral("-1/2*x^2+x+4", -2, 4)
\end{luacode}

The integral $\directlua{tex.print(int)}$ is equal to $\directlua{tex.print(res)}$.

\end{document}

然而,如果我尝试执行

lualatex maintex.tex --shell-escape

我收到以下错误:

This is LuaHBTeX, Version 1.12.0 (TeX Live 2020/Debian) 
 restricted system commands enabled.
(./maintex.tex
LaTeX2e <2020-10-01> patch level 4
 L3 programming layer <2021-01-09> xparse <2020-03-03>
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2020/04/10 v1.4m Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
(/usr/share/texlive/texmf-dist/tex/lualatex/luacode/luacode.sty
(/usr/share/texlive/texmf-dist/tex/generic/iftex/ifluatex.sty
(/usr/share/texlive/texmf-dist/tex/generic/iftex/iftex.sty))
(/usr/share/texlive/texmf-dist/tex/luatex/luatexbase/luatexbase.sty
(/usr/share/texlive/texmf-dist/tex/luatex/ctablestack/ctablestack.sty)))
(/usr/share/texlive/texmf-dist/tex/latex/l3backend/l3backend-luatex.def)
(./maintex.aux) (/usr/share/texlive/texmf-dist/tex/latex/base/ts1cmr.fd)[\direc
tlua]:2: module 'main' not found:
    no field package.preload['main']
    [kpse lua searcher] file not found: 'main'
stack traceback:
    [C]: in function 'require'
    [\directlua]:2: in main chunk.
\luacode@dbg@exec ...code@maybe@printdbg {#1} #1 }                                                  

l.12 \end{luacode}                 

? 

我正在使用Ubuntu 21.04来自以及。LuaLaTeX 1.12.0TeX Live 2020Lua 5.3.3

我做错了什么?我该如何解决这个问题?

文件.so本身似乎不是问题,因为使用独立版本时lua它可以工作,但使用时不行lualatex。所以我认为这一定是路径的问题,但我不知道该改什么。

任何帮助都将受到热烈欢迎。

答案1

首先要说明的是:您设置package.cpath的是在独立 Lua 中需要的,但在 LuaTeX 中会被忽略,因为这些模块是使用 TeX Live 的 kpathsea 而不是 Lua 的常规package.path/cpath系统找到的。但这不会导致您的问题,因为 kpathsea 默认在当前目录中查找,因此路径已经正确设置。

那么让我们来谈谈真正的问题:您必须使用该-shell-escape选项调用 LuaLaTeX,否则出于安全原因无法加载以本机代码编写的模块。(如果没有,-shell-escape您将无法运行任意程序,如果您仍然可以加载不受限制的本机代码,那么这将是完全没有意义的)

相关内容