1

(来自 comp.lang.ada 的交叉发布)

我正在使用 GTK 遵循 GNAT 示例中的插件方案。所以我需要 gtkada,并且为了正确处理它,gtkada_contributions。我从 Adacore 站点获取了(二进制)GNAT 和 gtkada 的实际版本(2020)。我从 Dmitry 的网站获取了 gtkada_contributions 源代码。

插件方案需要构建独立的可重定位库(在运行时加载)。因此,为了制作(在 Linux 上),我从终端调用:

   gtkada-env.sh
   export GTKADA_BUILD=relocatable
   gprbuild -Pbase

我的项目文件 base.gpr 带有 gtkada_contributions_lib.gpr,这是原始项目文件,添加了以下内容:

   for Library_Name use "gtkada_contributions";
   for Library_Dir use "lib";
   for Library_Kind use "relocatable";

上面的 gprbuild 命令现在产生:

Build Libraries
[gprlib]       gtkada_contributions.lexch
[link library] libgtkada_contributions.so
/opt/GNAT/2020/bin/../libexec/gcc/x86_64-pc-linux-gnu/9.3.1/ld: /home/frank/Lib/Ada/gtkada_contributions/gdk-color-ihls.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
/opt/GNAT/2020/bin/../libexec/gcc/x86_64-pc-linux-gnu/9.3.1/ld: /home/frank/Lib/Ada/gtkada_contributions/gdk-pixbuf-image.o: relocation R_X86_64_32 against symbol `gdk__pixbuf__image__rgb_imageT' can not be used when making a shared object; recompile with -fPIC

...

以及许多其他类似的行。

将 -fPIC 添加到 gtkada_contributions_lib.gpr (编译器开关)并没有改变任何东西,所以我猜是 gtkada 甚至 gtk 必须重新编译。独自前进可能意味着数小时的无用工作,可能会破坏我的系统。

那么如何编译/链接我的项目呢?那么未来没有可重定位库的项目是否仍然可以编译和链接?

提前感谢您的任何提示。

4

1 回答 1

1

终于明白了。在将 -fPIC 开关添加到项目文件后,似乎没有重新编译 gtkada_contributions。在 gprbuild 命令中包含 -f 标志(强制)后,所有内容都编译没有错误。

于 2020-08-06T07:13:23.643 回答