Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在Linux上使用包装Qt segfaults仅举一个基本示例_C_Qt - Fatal编程技术网

C 在Linux上使用包装Qt segfaults仅举一个基本示例

C 在Linux上使用包装Qt segfaults仅举一个基本示例,c,qt,C,Qt,我一直在尝试用C接口包装一些Qt类,以用于我最新的D项目。不管出于什么原因,这段代码在Windows上运行良好,但在Linux上运行失败,我一直无法找到它背后的原因。我还没有尝试在OSX上构建 我使用的是Qt5.3,运行的是LinuxMint 代码分布在几个不同的文件中,因此我认为如果我将所有相关代码放在一些粘贴箱中可能会更容易 这些都是非常薄的包装,所以即使你不看它们,也应该很容易理解我的测试程序 #include <Application.h> #include <Ma

我一直在尝试用C接口包装一些Qt类,以用于我最新的D项目。不管出于什么原因,这段代码在Windows上运行良好,但在Linux上运行失败,我一直无法找到它背后的原因。我还没有尝试在OSX上构建

我使用的是Qt5.3,运行的是LinuxMint

代码分布在几个不同的文件中,因此我认为如果我将所有相关代码放在一些粘贴箱中可能会更容易

这些都是非常薄的包装,所以即使你不看它们,也应该很容易理解我的测试程序

#include <Application.h>
#include <MainWindow.h>

int main( int argc, char* argv[])
{

    Qt_Application* app = Qt_Application_create(argc, argv);

    Qt_MainWindow* window = Qt_MainWindow_create();

    Qt_MainWindow_show(window);//<- Segfault happens here

    Qt_Application_exec(app);

    Qt_Application_destroy(app);

    Qt_MainWindow_destroy(window);

    return 0;
}
在segfault点获取回溯显示:

#0  0x00007ffff789a92a in strlen () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007ffff6b6c6bc in QCoreApplication::arguments() ()
   from /home/jebbs/Qt/5.3/gcc_64/lib/libQt5Core.so.5
#2  0x00007ffff1470213 in ?? ()
   from /home/jebbs/Qt/5.3/gcc_64/plugins/platforms/libqxcb.so
#3  0x00007ffff14705f9 in ?? ()
   from /home/jebbs/Qt/5.3/gcc_64/plugins/platforms/libqxcb.so
#4  0x00007ffff147d127 in ?? ()
   from /home/jebbs/Qt/5.3/gcc_64/plugins/platforms/libqxcb.so
#5  0x00007ffff1470009 in ?? ()
   from /home/jebbs/Qt/5.3/gcc_64/plugins/platforms/libqxcb.so
#6  0x00007ffff5d47e03 in QWindow::create() ()
   from /home/jebbs/Qt/5.3/gcc_64/lib/libQt5Gui.so.5
#7  0x00007ffff716b97a in QWidgetPrivate::create_sys(unsigned long long, bool, bool) () from /home/jebbs/Qt/5.3/gcc_64/lib/libQt5Widgets.so.5
#8  0x00007ffff714e6f5 in QWidget::create(unsigned long long, bool, bool) ()
   from /home/jebbs/Qt/5.3/gcc_64/lib/libQt5Widgets.so.5
#9  0x00007ffff71512ea in QWidget::setVisible(bool) ()
   from /home/jebbs/Qt/5.3/gcc_64/lib/libQt5Widgets.so.5
#10 0x00007ffff7bd8205 in Qt_MainWindow_show ()
   from /home/jebbs/Documents/projects/HeliosCTest/libqtcl.so.1
#11 0x0000000000400922 in main (argc=1, argv=0x7fffffffe158) at main.cpp:22 <-actually points to Qt_MainWindow_show(window), but this is from a test with printf's in it
strlen()中的0 0x00007FF789A92A,来自/lib/x86_64-linux-gnu/libc.so.6 #QCoreApplication::arguments()中的1 0x00007FF6B6C6BC() from/home/jebbs/Qt/5.3/gcc_64/lib/libQt5Core.so.5 #2 0x00007FF1470213英寸??() from/home/jebbs/Qt/5.3/gcc_64/plugins/platforms/libqxcb.so #3 0x00007ffff14705f9英寸??() from/home/jebbs/Qt/5.3/gcc_64/plugins/platforms/libqxcb.so #4 0x00007ffff147d127英寸??() from/home/jebbs/Qt/5.3/gcc_64/plugins/platforms/libqxcb.so #5 0x00007ffff1470009英寸??() from/home/jebbs/Qt/5.3/gcc_64/plugins/platforms/libqxcb.so #QWindow::create()中的6 0x00007ffff5d47e03() from/home/jebbs/Qt/5.3/gcc_64/lib/libQt5Gui.so.5 #QWidgetPrivate::create_sys(unsigned long,bool,bool)()中的7 0x00007FF716B97A来自/home/jebbs/Qt/5.3/gcc_64/lib/libQt5Widgets.so.5 #QWidget::create中的8 0x00007ffff714e6f5(无符号长、布尔、布尔)() from/home/jebbs/Qt/5.3/gcc_64/lib/libQt5Widgets.so.5 #QWidget::setVisible(bool)()中的9 0x00007FF71512EA from/home/jebbs/Qt/5.3/gcc_64/lib/libQt5Widgets.so.5 #Qt_主窗口中的10 0x00007FF7BD8205显示() from/home/jebbs/Documents/projects/HeliosCTest/libqtcl.so.1
#在main.cpp:22处,main中的11 0x000000000040922(argc=1,argv=0x7fffffffe158)我认为用C包装Qt代码不是一个好主意。如果您更喜欢用C编写代码,请使用而不是Qt。Qt似乎有更好的支持,而且我正在寻找的许多功能都是内置的,所以我想使用它。为什么你认为这样包装不是一个好主意?然后用QT用C++代码!我想创建C接口,以便在d中使用它。然后您需要了解d的内存模型(IIRC,它是一种垃圾收集语言,使用Boehm的保守垃圾收集器实现)和Qt的内存模型。这需要一些工作。你应该在你的问题中告诉我你正在把Qt和D连接起来。
#0  0x00007ffff789a92a in strlen () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007ffff6b6c6bc in QCoreApplication::arguments() ()
   from /home/jebbs/Qt/5.3/gcc_64/lib/libQt5Core.so.5
#2  0x00007ffff1470213 in ?? ()
   from /home/jebbs/Qt/5.3/gcc_64/plugins/platforms/libqxcb.so
#3  0x00007ffff14705f9 in ?? ()
   from /home/jebbs/Qt/5.3/gcc_64/plugins/platforms/libqxcb.so
#4  0x00007ffff147d127 in ?? ()
   from /home/jebbs/Qt/5.3/gcc_64/plugins/platforms/libqxcb.so
#5  0x00007ffff1470009 in ?? ()
   from /home/jebbs/Qt/5.3/gcc_64/plugins/platforms/libqxcb.so
#6  0x00007ffff5d47e03 in QWindow::create() ()
   from /home/jebbs/Qt/5.3/gcc_64/lib/libQt5Gui.so.5
#7  0x00007ffff716b97a in QWidgetPrivate::create_sys(unsigned long long, bool, bool) () from /home/jebbs/Qt/5.3/gcc_64/lib/libQt5Widgets.so.5
#8  0x00007ffff714e6f5 in QWidget::create(unsigned long long, bool, bool) ()
   from /home/jebbs/Qt/5.3/gcc_64/lib/libQt5Widgets.so.5
#9  0x00007ffff71512ea in QWidget::setVisible(bool) ()
   from /home/jebbs/Qt/5.3/gcc_64/lib/libQt5Widgets.so.5
#10 0x00007ffff7bd8205 in Qt_MainWindow_show ()
   from /home/jebbs/Documents/projects/HeliosCTest/libqtcl.so.1
#11 0x0000000000400922 in main (argc=1, argv=0x7fffffffe158) at main.cpp:22 <-actually points to Qt_MainWindow_show(window), but this is from a test with printf's in it