toolBoxOne = QWidget() toolBoxOne这个没有加入布局吧, 也没有指定父亲
toolBoxOne指定父控件就没问题了,我好奇的是其他按钮,及layout,我都没有指定父控件。但是一旦toolBoxOne指定父控件的话,就都可以正常显出来了。这是我现在疑惑的地方。
toolBoxOne里加入了layout布局。
-----------------------------------------------------------------------------------------------
如果不指定toolBoxOne的父控件的话,再其前边加个self,最后再调用下self.toolBoxOne.show(),也能显示出窗口及按钮。
在ubuntu下用的pyqt5.9。
在主类(继承自QWidget)里,新建个toolBoxOne(也是继承自QWidget),然后toolBoxOne里放置垂直布局,垂直布局里放几个按钮。
运行后,结果什么也显示不出来。
import sys
from PyQt5.QtWidgets import QWidget,QVBoxLayout, QPushButton, QApplication
class Test(QWidget):
def __init__(self):
super().__init__()
toolBoxOne = QWidget()
btnOne = QPushButton('One')
btnTwo = QPushButton('Two')
btnThree = QPushButton('Three')
layout = QVBoxLayout()
layout.addWidget(btnOne)
layout.addWidget(btnTwo)
layout.addWidget(btnThree)
toolBoxOne.setLayout(layout)
# self.toolBoxOne.show()
self.setWindowTitle('Test')
# self.toolBoxOne.setGeometry(100, 100, 500, 500)
if __name__ == '__main__':
app = QApplication(sys.argv)
win = Test()
win.show()
sys.exit(app.exec_())
后来发现toolBoxOne这样新建:
toolBoxOne = QWidget(self)
或者这样:
self.toolBoxOne = QWidget() 然后self.toolBoxOne.show()
就可以显示出布局了。
如果说toolBoxOne必须要指明父控件才可以显示的话,那么,为什么按钮及垂直布局,我没有指明父控件也可以正常显示呢?
http://www.g.com.cn/tech/18009957/
搜到了这么个帖子,玩具里面也用上了f1c600,这个片子内置32MDDR。
如果我们在 buildroot 中的 toolchain 指定外部编译工具为之前在 Ubuntu 上面 apt-get 的交叉编译器,那么编译的时候则会出现错误信息:
Distribution toolchains are unsuitable for use by Buildroot,
as they were configured in a way that makes them non-relocatable,
and contain a lot of pre-built libraries that would conflict with
the ones Buildroot wants to build.这是因为 Ubuntu 得到的交叉编译器被配置成不可重定位的,而且包含了一些与 buildroot 相冲突的库,官方解释:
Distro toolchains, i.ie. toolchains coing with distributions, will
almost invariably be unsuitable for use with Buildroot:they are mostly non-relocatable;
their sysroot is tainted with a lot of extra libraries.
Especially, the toolchains coming with Ubuntu (really, all the Debian
familly of distros) are configured with –sysroot=/ which makes them
non-relocatable, and they already contain quite some libraries that
conflict (in any combination of version, API or ABI) with what Buildroot
wants to build (i.e. extra libraries, some not even present in
Buildroot…) but also their mere preence when Buildroot does not expect
them to be already built (so that a package would enable features when
it should not).所以我们要自己下载交叉编译工具或者让 buildroot 自动下载。
参考链接: BeagleBone Black 从零到一 (3 Linux 镜像、initramfs、Device Tree及根文件系统)
首先感谢您的帮助。
通过之前下载安装的arm-linux-gnueabi 4.6版本,创建根文件成功了。
您的意思是说apt-get安装的交叉编译器不行,非要下载安装包安装的才可以?
如何我再下载最新版的交叉编译器的安装包,再安装,这样的话,我电脑上可能就有两个最新版的交叉编译器了,够乱的。
再问个问题,make menuconfig时,我没有选enable root login with password,结果创建根文件系统后,用串口调试,发现提示需要登录,然后我账户和密码都输入为root,结果提示不正确。
后来我选中那个选项后,设了密码,再make了一遍,才可以。
在这里想问下,没选那个选项之前,为什么登录不了?
你这个工具链哪里来的?
试一试用这个命令安装的工具链 sudo apt-get install gcc-arm-linux-gnueabihf
就是这么来的...
在ubuntu14.04下用这个命令的话,默认安装的是4.8版本,但在ubunt17.10下,安装的就是7.2版本。
any@Any-Desktop-PC:/opt/buildroot-2017.11$ sudo apt-get install gcc-arm-linux-gnueabihf
[sudo] any 的密码:
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
gcc-arm-linux-gnueabihf 已经是最新版 (4:7.2.0-1ubuntu1)。
下列软件包是自动安装的并且现在不需要了:
linux-headers-4.13.0-19 linux-headers-4.13.0-19-generic linux-image-4.13.0-19-generic
linux-image-extra-4.13.0-19-generic linux-signed-image-4.13.0-19-generic
使用'sudo apt autoremove'来卸载它(它们)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 2 个软件包未被升级。
Distribution toolchains are unsuitable for use by Buildroot,
as they were configured in a way that makes them non-relocatable,
and contain a lot of pre-built libraries that would conflict with
the ones Buildroot wants to build.我知道了, 你这个工具链不可以被重定位(non-relocatable), buildroot不接受这个工具链.
arm-linxu-gnueabihf版本太新了?
buildroot我也是下载的最新版的。
有什么解决的办法呢?除了下载低版本的交叉编译器。
/bin不用加的,make时会自动追加/bin
试了下:
>>> toolchain-external-custom Configuring
Cannot execute cross-compiler '/usr/bin/bin/arm-linux-gnueabihf-gcc'
package/pkg-generic.mk:224: recipe for target '/opt/buildroot-2017.11/output/build/toolchain-external-custom/.stamp_configured' failed
make: *** [/opt/buildroot-2017.11/output/build/toolchain-external-custom/.stamp_configured] Error 1
我也遇到了类似的问题,搭车请教。
硬件环境是ilicheepi一代,系统是ubuntu17.10,想用buildroot创建根文件系统。
我打算用最新版本的交叉编译器,apt-get下载的版本是arm-linux-gnueabihf-gcc 7.2。查看了下,命令应该是在/usr/bin下,而相关库在/usr/arm-linux-gnueabihf文件夹下。
那么我在buildroot配置菜单里,toolchains是这么选的:
选择外部编译器;
选择编译器路径:/usr
选择编译器头?:arm-linux-genueabihf
然后我执行make,但仍报以下错误:
>>> toolchain-external-custom Configuring
Distribution toolchains are unsuitable for use by Buildroot,
as they were configured in a way that makes them non-relocatable,
and contain a lot of pre-built libraries that would conflict with
the ones Buildroot wants to build.
package/pkg-generic.mk:224: recipe for target '/opt/buildroot-2017.11/output/build/toolchain-external-custom/.stamp_configured' failed
make: *** [/opt/buildroot-2017.11/output/build/toolchain-external-custom/.stamp_configured] Error 1
any@Any-Desktop-PC:/opt/buildroot-2017.11$
意思是:
交叉编译器不适合buildroot使用?
原因是它们以一种可重新定位的方式配置?
并且,包含了很多预置的库,这些库可能和buildroot想要创建的东西冲突?
楼主你好,想请教下buildroot使用的问题。
硬件环境是ilicheepi一代,系统是ubuntu17.10,想用buildroot创建根文件系统。有几个问题请教。
我打算用最新版本的交叉编译器,apt-get下载的版本是arm-linux-gnueabihf-gcc 7.2。
那么我在buildroot配置菜单里,toolchains这里有几个选项不知道该怎么选。
选择外部编译器;
选择编译器路径:/usr
选择编译器头?:arm-linux-genueabihf
然后我执行make,报一下错误:
as they were configured in a way that makes them non-relocatable,
and contain a lot of pre-built libraries that would conflict with
the ones Buildroot wants to build.
package/pkg-generic.mk:224: recipe for target '/opt/buildroot-2017.11/output/build/toolchain-external-custom/.stamp_configured' failed
make: *** [/opt/buildroot-2017.11/output/build/toolchain-external-custom/.stamp_configured] Error 1
any@Any-Desktop-PC:/opt/buildroot-2017.11$