我正在尝试为PowerPC架构交叉编译Boost库(Thread,System)。我按照以下步骤,但面临问题。
我运行一个shell脚本来设置我的工具链。编译器ppc_4xx-g ++在shell中可见。
遵循的步骤:
结果:创建了所有目录但编译失败。我无法附加错误日志(请将您的电子邮件发送给我,以便我可以在需要时向您发送错误日志)。以下是错误日志的快照。
Component configuration:
- atomic : not building
- chrono : not building
- context : not building
- date_time : not building
- exception : not building
- filesystem : not building
- graph : not building
- graph_parallel : not building
- iostreams : not building
- locale : not building
- math : not building
- mpi : not building
- program_options : not building
- python : not building
- random : not building
- regex : not building
- serialization : not building
- signals : not building
- system : building
- test : not building
- thread : building
- timer : not building
- wave : not building
...patience...
...found 20376 targets...
...updating 10110 targets...
common.mkdir BoostPowerPC
common.mkdir BoostPowerPC/lib
common.mkdir BoostPowerPC/boost
common.mkdir BoostPowerPC/boost/bin.v2
common.mkdir BoostPowerPC/boost/bin.v2/libs
common.mkdir BoostPowerPC/boost/bin.v2/libs/system
common.mkdir BoostPowerPC/boost/bin.v2/libs/system/build
common.mkdir BoostPowerPC/boost/bin.v2/libs/system/build/gcc-power
common.mkdir BoostPowerPC/boost/bin.v2/libs/system/build/gcc-power/release
common.mkdir BoostPowerPC/boost/bin.v2/libs/system/build/gcc-power/release/threading-multi
gcc.compile.c++ BoostPowerPC/boost/bin.v2/libs/system/build/gcc-power/release/threading-multi/error_code.o
In file included from ./boost/config/select_stdlib_config.hpp:18,
from ./boost/config.hpp:40,
from ./boost/system/config.hpp:13,
from libs/system/src/error_code.cpp:18:
/opt/ELDK/4.2/ppc_4xx/usr/include/c++/4.2.2/cstddef:50:28: error: bits/c++config.h: No such file or directory
In file included from /opt/ELDK/4.2/ppc_4xx/usr/include/c++/4.2.2/ios:43,
from /opt/ELDK/4.2/ppc_4xx/usr/include/c++/4.2.2/ostream:45,
from /opt/ELDK/4.2/ppc_4xx/usr/include/c++/4.2.2/iterator:70,
from ./boost/iterator.hpp:17,
from ./boost/operators.hpp:86,
from ./boost/system/error_code.hpp:17,
from libs/system/src/error_code.cpp:19:
.
.
.
抱怨找不到文件c ++ config.h。但该文件位于/opt/ELDK/4.2/usr/include/c++/4.2.2/powerpc-linux/bits目录中
然后我尝试在b2命令中使用标签“include”。但后来我收到一个错误,找不到文件cstddef,它出现在目录/opt/ELDK/4.2/usr/include/c++/4.2.2中。我想我正在编写包含路径。
您认为这是什么问题?为什么我的编译器即使它存在也无法找到该文件?有什么建议吗?
更新
我使用了-d + 2和-q选项,结果如下。
"ppc_4xx-g++" -ftemplate-depth-128 -O3 -finline-functions -Wno-inline -Wall -pedantic -pthread -fPIC -DBOOST_ALL_NO_LIB=1 -DBOOST_SYSTEM_DYN_LINK=1 -DNDEBUG -I"." -I"/opt/ELDK/4.2/ppc_4xx/usr/include" -c -o "BoostPowerPC/boost/bin.v2/libs/system/build/gcc-power/release/threading-multi/error_code.o" "libs/system/src/error_code.cpp"
编译日志:
In file included from ./boost/config/select_stdlib_config.hpp:18,
from ./boost/config.hpp:40,
from ./boost/system/config.hpp:13,
from libs/system/src/error_code.cpp:18:
/opt/ELDK/4.2/ppc_4xx/usr/include/c++/4.2.2/cstddef:50:28: error: bits/c++config.h: No such file or directory
正如我们所看到的那样,包含所需文件的更高目录并且对编译器可见。我甚至尝试使用-L命令并指定根目录。它仍然无济于事。
我检查了ppc_4xx-g ++的编译选项以及对我感兴趣的2个选项
- sysroot =:这是编译器使用的所有包含和库的根目录。
-B:使用此功能,我们可以为编译器添加搜索路径。
我试过了两次,但没有帮助。有什么建议吗?
答案 0 :(得分:1)
首先,这对Boost.Build来说并不是一个问题。这意味着通过执行最后一个命令(失败),在命令行上手动运行它,然后调整它直到它工作,将更容易修复它。
如上所述,您应该从命令行中删除-I"/opt/ELDK/4.2/ppc_4xx/usr/include"
。
通常,编译器应自动找到自己的头文件。有两件事可能会影响到这一点:
which ppc_4xx-g++
确实找到了。您还可以将-v
添加到编译器调用中,以检查它正在搜索的目录。作为最后的手段,您可以尝试--sysroot=/opt/ELDK/4.2/ppc_4xx/usr/bin
。
答案 1 :(得分:0)
您的包含路径不正确,并且错误清楚地表示这一点,因为每个工具链都有自己的路径,请确保更新STL等的包含路径以指向新位置。它应该解决你的问题!
答案 2 :(得分:0)
问题是因为编译器中存在错误。它无法递归搜索目录以查找包含文件夹。当我手动提供额外的包含路径时,它拒绝它说明冗余包含路径(因为它在相同的目录结构中) - 通过使用-v选项找到它。然后我创建了一个目录,创建了一个指向具有必要包含文件的目录的软链接,并在我的包含路径中包含了这个新目录(解决方法)。这很有效,我可以生成库。
例如:包含文件存在于编译器不接受的目录abc / include / xyz / include中,因为我已经指定了路径abc / include。因此,我创建了一个目录别名,并将其链接到abc / include / xyz / include。然后我将./alias包含在其中一个包含路径中并且它有效。这是一个已知的编译器问题,在以后的版本中修复,我想在4.6
中 PS:这个想法不是我的,但在网上发现了一个类似的帖子,这对我很有帮助。