在Ubuntu上编译Giraffe库Hello World

问题描述 投票:0回答:2

我正在尝试从 Giraffe Library 网站编译 GTK 3 Hello World 示例

我从源安装了 Poly/ML 5.9.1,为 Poly 可执行文件设置了 PATH,为库设置了 LD_LIBRARY_PATH。另外,PKG_CONFIG_PATH 以便 Makefile 可以找到

polyml.pc

现在我明白了

$ make polyml
LD_LIBRARY_PATH=/home/gergely/giraffe/lib/polyml:/usr/lib:/home/gergely/local/lib:/usr/lib/x86_64-linux-gnu: \
 GIRAFFE_SML_LIB=/home/gergely/giraffe/lib/sml \
 GIRAFFE_DEBUG=1 \
 /usr/bin/poly --use make-polyml-libs.sml -q
echo "PolyML.export (\"example-1-polyml.o\", main);" > polyml-export.sml
LD_LIBRARY_PATH=/home/gergely/giraffe/lib/polyml:/usr/lib:/home/gergely/local/lib:/usr/lib/x86_64-linux-gnu: \
 GIRAFFE_SML_LIB=/home/gergely/giraffe/lib/sml \
 GIRAFFE_DEBUG=1 \
 /usr/bin/poly --use make-polyml-app.sml -q
cc \
 -g \
 -rdynamic \
 -Wl,--no-copy-dt-needed-entries \
 -Wl,-rpath,/usr/lib \
 -Wl,-rpath,/home/gergely/giraffe/lib/polyml \
 -o example-1-polyml \
 example-1-polyml.o \
 -L/home/gergely/giraffe/lib/polyml -lgiraffe-gobject-2.0 -lgiraffe-gio-2.0 -lgiraffe-gtk-3.0 \
    `PKG_CONFIG_PATH=/usr/lib/pkgconfig:/home/gergely/local/lib/pkgconfig:/usr/lib/x86_64-linux-gnu pkg-config --libs polyml gobject-2.0 gio-2.0 gio-unix-2.0 gtk+-3.0`
    /usr/bin/ld: example-1-polyml.o: warning: relocation in read-only section `.text'
    /usr/bin/ld: example-1-polyml.o:(.data+0x50): undefined reference to `PolyFFIGeneral'
    /usr/bin/ld: example-1-polyml.o:(.data+0x230): undefined reference to `PolyTimingGeneral'
    /usr/bin/ld: example-1-polyml.o:(.data+0x410): undefined reference to `PolyFFIGeneral'
    /usr/bin/ld: warning: creating DT_TEXTREL in a PIE
    collect2: error: ld returned 1 exit status
    make: *** [Makefile:210: example-1-polyml] Error 1

如何在我的 Ubuntu 22.04 上编译这个程序?

sml pkg-config polyml
2个回答
0
投票

事先在另一台机器上我能够编译它。

我查了一下,我使用了来源中的 Poly/ML 5.9。

这里我从源代码安装了Poly/ML 5.9,然后重新编译了Giraffe Library,然后我就可以编译Hello World示例了。


0
投票

Giraffe Library 提供的示例不需要为 Poly/ML 设置 PATH、LD_LIBRARY_PATH 或 PKG_CONFIG_PATH。 示例 Makefile 包括

${GIRAFFEHOME}/config.mk
,它存储安装 Giraffe Library 时找到的 Poly/ML 安装。 (在上面的记录中,可以看到 LD_LIBRARY_PATH 和 PKG_CONFIG_PATH 是在 Makefile 生成的构建命令中本地设置的。)

从构建命令中,我可以看到 Giraffe Library 正在使用安装在

/usr
下的 Poly/ML。 我怀疑这不是您从源代码构建的版本(
/usr
对于手动构建的版本来说不是一个好的前缀),而是包管理系统提供的版本。 您需要重新安装 Giraffe Library 并指定特定的 Poly/ML 前缀,例如

./configure --polyml-prefix <polyml-installation-dir>
make
make install

我怀疑你让它工作不是因为你使用了 Poly/ML 5.9,而是因为你重新安装了 Giraffe Library,它选择了 5.9 版本而不是系统版本。

您的应用程序的 Makefile 不需要使用

${GIRAFFEHOME}/config.mk
。 相反,您可能要求构建环境具有合适的 PATH、LD_LIBRARY_PATH 和 PKG_CONFIG_PATH 值。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.