我们被卡住了bug in RHEL5's gcc-4.3.2。作为解决方法,我们提取了丢失的对象并将其放在目标文件中。将此目标文件添加到每个链接会使问题消失。
虽然将其直接添加到LDFLAGS
似乎是一个很好的解决方案,但这不起作用,例如libtool
无法处理其中的非la文件。
稍微更便携的解决方案似乎是直接修补gcc规范以将其添加到每个链接。我想出了
*startfile:
+ %{shared-libgcc:%{O*:%{!O0:/PATH/TO/ostream-inst.o}}}
在使用优化编译共享库时,将ostream-inst.o
添加到链接中使用的启动文件列表中。
尝试使用此规范编译boost会产生一些错误,因为它的构建会直接使用ld
的{{1}} / --startgroup
设置一些对象。
我应该如何更新该规范以涵盖该案例,甚至更好地涵盖所有案例?
答案 0 :(得分:0)
浏览此网址 Specifying subprocesses and the switches to pass to them 和 GCC Command Options
如果这对你有所帮助,那很好。
答案 1 :(得分:0)
我知道这不是您想要听到的答案(因为您在问题中另有说明),但是您在这里遇到了麻烦,并且由于您的编译器有问题,可能会遇到更多问题。你应该找到一种替换它的方法,因为你会发现自己在下次出现一些模糊的构建系统时会编写更多的解决方法。那里不仅有bjam。
抱歉,我无法帮到你。您可以尝试手工编写.lo文件(毕竟它是双线程)并将其插入LDFLAGS。
答案 2 :(得分:0)
如果是GCC 4.3的错误,你是否尝试构建(通过编译来源)并使用更新的GCC。 GCC 4.6.2即将推出。你考虑过使用它吗?