(来自 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 必须重新编译。独自前进可能意味着数小时的无用工作,可能会破坏我的系统。
那么如何编译/链接我的项目呢?那么未来没有可重定位库的项目是否仍然可以编译和链接?
提前感谢您的任何提示。