Plugins gtkada:使用-fPIC重新编译

Plugins gtkada:使用-fPIC重新编译,plugins,ada,gnat,fpic,gtkada,Plugins,Ada,Gnat,Fpic,Gtkada,(来自comp.lang.ada的交叉过账) 我使用GTK遵循GNAT示例中的插件方案。所以我需要gtkada,为了正确地完成这项任务,gtkada_贡献。从Adacore网站上,我抓取了(二进制)GNAT和gtkada的实际版本(2020)。从Dmitry的网站上,我获取了gtkada_贡献的源代码 插件方案要求构建独立的可重定位库(在运行时加载)。因此(在Linux上)我从终端调用: gtkada-env.sh export GTKADA_BUILD=relocatable

(来自comp.lang.ada的交叉过账)

我使用GTK遵循GNAT示例中的插件方案。所以我需要gtkada,为了正确地完成这项任务,gtkada_贡献。从Adacore网站上,我抓取了(二进制)GNAT和gtkada的实际版本(2020)。从Dmitry的网站上,我获取了gtkada_贡献的源代码

插件方案要求构建独立的可重定位库(在运行时加载)。因此(在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__lib.gpr(编译器开关)并没有改变任何东西,所以我猜必须重新编译的是gtkada甚至是gtk。独自工作可能意味着数小时无用的工作,结果可能是破坏我的系统

那么我如何编译/链接我的项目呢? 那么,没有可重定位库的未来项目还会编译和链接吗


提前谢谢你的提示。

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

据我所知,GtkAda分为3个版本:静态、静态pic和可重定位。问题:您确定编译器在编译期间没有添加anywhere标志-fPIC吗?或-静态标志?因为它可能试图调用静态pic版本。只需使用flag-vh运行gprbuild就可以获得更多信息。对于64位linux,社区部分包含gtkada的源代码和bin版本。我下载了垃圾桶。它也必须包含源代码,因为我在执行安装脚本时看到了很多编译消息。除了目标目录之外,我不记得别人问过我什么。这很奇怪。我在Ubuntu上测试了gtkada_在几乎相同的集合(也是GNAT GPL 2020和gtkada 2020)上的贡献,一切正常。如果我没记错的话,有些发行版向编译器添加了自己的标志(by.bashrc、环境变量等)。例如,不久前,Debian或Fedora默认添加了-fPIC。我现在不确定是哪一个。在重新安装GNAT和gtkada后,我再次查看了错误消息和gtkada_贡献目录。在早期的编译尝试中,似乎有一些没有-fPIC的对象文件,在项目文件中插入此标志后,没有重新编译。在使用-f标志(force)重新编译之后,它工作了。问题已解决,感谢分享您的观察结果。