使用Emscripten编译PDF2SVG时出现致命错误

时间:2018-01-20 00:15:52

标签: c pdf svg emscripten

出于某些原因,我需要在浏览器中使用PDF2SVG(https://github.com/dawbarton/pdf2svg);为了实现这一点,我想使用Emscripten。所以我按照他们网站上描述的步骤进行了操作。

但我总是收到这个错误:

J = [df/da  df/db]

我下载了两个必需的库:
Poppler:https://poppler.freedesktop.org/poppler-0.5.4.tar.gz
卡里奥:https://www.cairographics.org/releases/cairo-1.2.6.tar.gz

并提取到“pdf2svg”目录。

我该怎么做才能传递错误?

1 个答案:

答案 0 :(得分:0)

<强>声明

我决定写一个答案,即使这不会给你一个答案 解决你当前的问题。评论部分非常有限,我们 无法进行适当的讨论,也无法在评​​论中提供足够的细节。

修改

我发现了answer。这也可以帮助您解决问题

**结束编辑**

您的问题中的一个主要问题是我们没有足够的信息 你的系统:我不知道你正在使用哪个发行版,哪些包是 安装,如何安装它们(手动与包管理器),无论你是否已经安装 安装了开发包等。

大多数情况下,使用的方法是安装开发包 包经理。

今天许多软件包都支持pkg-config,这是一个打印的工具 用于编译和构建包的必要CFLAGSLDFLAGS。可悲的是 模块名称有时可能在分布之间变化。比如我的 系统我做了以下以获取包的名称

$ pkg-config --list-all | grep glib
...
glib-2.0                            GLib - C Utility Library

$ pkg-config glib-2.0 --cflags 
-I/usr/include/glib-2.0 -I/usr/lib64/glib-2.0/include

$ pkg-config glib-2.0 --libs
-lglib-2.0

其中显示我应该使用哪个CFLAGS和哪个LDFLAGS来使用glib。

通常你会做这样的事情:

$ gcc main.c -omain `pkg-config glib-2.0 --cflags --libs`
  

现在我在评论中说过我个人没有使用emcc,所以我   没有参数,但猜测它会有相同或非常相似的   参数。

     

每当出现错误时我都会重命名包含位置,因此修复了很多位置错误,但这次我遇到了以下错误:

"error: parameter named 'glib_major_version' is missing"
     

据我所知,所有常量都在configure.ac文件中定义,但似乎编译器没有加载它   自动归档。如何强制编译器在编译时包含configure.ac文件?

现在我们正在进入GNU Build System的另一个领土, 也称为Autotools。我不知道你对它有多了解,但总是在 你的问题,那里存在一些知识差距。

编写软件时,您可以手动编译,输入编译 自己命令,或者您可以使用自动化过程的软件。 make是 其中之一。虽然自己写一个Makefile是完全可以的,但它可以 对于不同的大型项目维护Makefile非常具有挑战性 建立选项,不同的目标,交叉编译等。人们使用时 另一个允许您动态创建Makefile的软件。在里面 过去许多开源项目,特别是Free Software Foundation的项目 与GNU一样,使用 GNU Build System 构建他们的软件 1

使用GNU Build System的项目有一组独特的文件和脚本 帮助程序员维护Makefile并使用户易于编译 并安装它们。通常作为用户执行:

$ tar xpzf someproject-0.0.1.tar.gz
$ cd someproject-0.0.1
$ ./configure --prefix=/usr
$ make
$ make install

configure脚本接受更多参数,您可以使用它控制哪些参数 库支持,启用/禁用功能,交叉编译选项等。 configure将评估您的系统,确定您拥有哪个编译器 库及其安装的版本等。如果一切顺利,那么 它动态创建Makefile(模板外),以便您可以运行 make命令。 configure不仅会创建必要的Makefile,还会创建 还可以在构建软件时使用其他文件。

这些辅助文件可以是任何内容,主要是定义的config.h等文件 宏,以便包含config.h的代码可以查看哪些选项可用。 glib可能包含其他文件,例如声明 glib_major_version 2

那究竟是什么configure.ac?现在,如果你打开一个configure脚本,你就可以了 大多数人看到大量的代码,这些代码并不完全是用户友好的阅读。那是 因为configure文件通常不是手写的,而是动态的 由维护者生成。 configure.ac是您必须放置的地方 将影响configure文件的规则:类似于哪种语言(C,C ++, 别的东西),哪些库,检查依赖性等等。一切都在 简单的语法。 3

命令autoconf读取configure.ac并生成新的configure 可以在tarball中发送的文件。这个过程显然更复杂 除此之外,还有其他步骤需要做。通常autoreconf -i 根据{{​​1}}和所需的所有模板重建configure configure.ac {(例如configure个模板,来自Makefile.in 文件)。

由于您遇到的错误,我告诉您这一切。像我一样 在开始时说,我不知道你是如何安装glib的。如果有开发者 您系统的库包,您应该安装它们和您的 Makefile.am基于emcc 4 告诉你的正确论据。

如果这不起作用且你一直遇到问题,那么我建议你 下载glib的tarball并自己编译。 使用pkg-config设置路径 它将安装在哪里,基本上在你的家庭帐户的某个地方,所以 你不会意外地覆盖系统范围的glib安装。

然后使用./configure --prefix=/home/youruser/projects/whatever构建glib并将其与make一起安装。然后你必须 传递make install的正确路径。

文件emcc根本不应该与您有关,除非您想要更改 configure.ac文件中的内容。在这种情况下,你必须编辑 configure,进行更改,运行configure.ac重新创建 autoreconf -i个文件。然后,您可以再次致电configure。 但我非常怀疑你必须做这些事情。

1 现在你看到很多使用Cmake的开源项目, Scons等等。

2 也许是宏或内联函数。我没有调查过 构建glib的文件。

3 它可能变得非常复杂,但仍然更容易阅读 ./configure && make && make install文件本身。

4 在非默认路径中安装库时(如configure或) /usr i),您必须告诉/usr/local在哪里找到pkg-config个文件 包含.pc读取的信息。 pkg-config通常会把这些 make install中的文件(除非您通过${prefix}/share--datadir --datarootdir)的选项。

所以如果你做了

configure

然后你必须像这样打$ ./configure --prefix=/home/david/mylibs && make && make install

pkg-config