我正在使用以下./configure
命令构建GCC 5.2.0交叉编译器:
../gcc-5.2.0/configure --prefix=/usr --build=x86_64-unknown-linux-gnu --host=x86_64-unknown-linux-gnu --target=x86_64-myos-linux-gnu --disable-nls --enable-languages=c,c++ --with-sysroot=/myos --with-native-system-header-dir=/include
因此构建和主机平台均为x86_64-unknown-linux-gnu
,目标平台为x86_64-myos-linux-gnu
。
在构建环境中,我有一个目录/myos
(/
的子目录),其中包含目标平台的根文件系统。
据我所知,GCC构建过程分为两个主要阶段,第一个是构建环境中的工具链用于生成GCC可执行文件等,第二个阶段是刚刚构建的可执行文件用于构建各种“目标库”,例如libgcc
和libstdc++
。
所以在make
和make DESTDIR=... install
之后,我有:
usr/
usr/bin/
usr/include/
usr/lib/
usr/libexec/
usr/share/
usr/x86_64-myos-linux-gnu/
根据我的理解,usr/x86_64-myos-linux-gnu/
包含要放入目标平台文件系统的文件(例如.so
和libgcc
的{{1}}个文件但是,有几个问题:
1)只需执行libstdc++
,make install
就不会被放入我的目标目录usr/x86_64-myos-linux-gnu/
。
2)如果我/myos
mv
目录,它将与目标库usr/x86_64-myos-linux-gnu/
文件不一致。例如,文件.la
包含以下行:
usr/x86_64-myos-linux-gnu/lib64/libtsan.la
它表示dependency_libs=' -lpthread -ldl '/usr/x86_64-myos-linux-gnu/lib/../lib64/'/libstdc++.la -lm'
的绝对路径,但如果我公开libstdc++
mv
目录,那就不会存在。
顶级usr/x86_64-myos-linux-gnu/
和GCC install docs似乎都没有任何方式来更改./configure --help
目录的路径。有什么想法吗?
答案 0 :(得分:0)
根据我的理解,usr / x86_64-myos-linux-gnu /包含要放入目标平台文件系统的文件
不,您已经构建了一个交叉编译器,因此安装的文件应该存在于主机平台上,而不是目标。
1)通过简单地进行make install,usr / x86_64-myos-linux-gnu /将不会被放入我的目标目录/ myos。
正确。这些文件存在于GCC安装树中,而不是sysroot。这样他们仍然会被交叉编译器找到,所以一切都还可以。
通常,sysroot(在您的情况下为/myos
)实际上不是目标的根FS,它将是与目标上安装的相同文件的副本,因此将GCC的库安装到该sysroot中不会真的有帮助,因为它们不会出现在目标上。
如果你想在目标上使用这些库,你需要自己安装它们。