Gcc 如何向每个链接添加对象文件
这是一个让我们陷入困境的问题。作为解决方法,我们提取了丢失的对象并将其放入对象文件中。将此对象文件添加到每个链接可以消除问题 虽然将其直接添加到Gcc 如何向每个链接添加对象文件,gcc,ld,specifications,Gcc,Ld,Specifications,这是一个让我们陷入困境的问题。作为解决方法,我们提取了丢失的对象并将其放入对象文件中。将此对象文件添加到每个链接可以消除问题 虽然将其直接添加到LDFLAGS似乎是一个很好的解决方案,但这不起作用,因为例如libtool无法处理其中的非la文件 一个更具可移植性的解决方案似乎是直接修补gcc规范,将其添加到每个链接中。我想出了 *startfile: + %{shared-libgcc:%{O*:%{!O0:/PATH/TO/ostream-inst.o}}} 其中,ostream-inst.
LDFLAGS
似乎是一个很好的解决方案,但这不起作用,因为例如libtool
无法处理其中的非la文件
一个更具可移植性的解决方案似乎是直接修补gcc规范,将其添加到每个链接中。我想出了
*startfile:
+ %{shared-libgcc:%{O*:%{!O0:/PATH/TO/ostream-inst.o}}}
其中,ostream-inst.o
被添加到链接中使用的起始文件列表中,用于编译具有优化功能的共享库
尝试使用此规范编译boost会出现一些错误,因为它的构建直接使用ld
的--startgroup
/--endgroup
设置一些对象
我应该如何更新该规范以涵盖该情况,或者更好地涵盖所有情况?浏览此URL和
如果这对您有帮助,那就太好了。我知道这不是您想要听到的答案(因为您在问题中另外指定了答案),但是您在这里遇到了麻烦,并且可能会遇到更多问题,因为您的编译器有缺陷。您应该找到一种替换它的方法,因为您将发现在下次出现一些模糊的构建系统时,您将编写更多的围绕代码的工作。那里不仅有比亚姆
对不起,我不能再帮你了。您可以尝试手工编写一个.lo文件(毕竟它是一个两行程序)并将其插入到LDFLAGS中。如果它是GCC4.3的错误,您是否尝试构建(通过从源代码编译)并使用更新的GCC。GCC 4.6.2即将发布。你考虑使用它吗?谢谢你的评论。实际上,我的问题不在于bjam,而在于boost的build使用的花哨旗帜。修补gcc规范的整个要点是使此修复程序可以由多个构建系统使用(目前它与automake、make、cmake和basic bjam一起使用)。将
*.lo
文件填充到LDFLAGS中可能看起来不错,但这会破坏不使用libtool的任何功能(例如基本make)。然后我宁愿继续看libtool
关于链接非libtool对象的不可移植性的警告。这是政府的事。