2013-06-27 58 views
0

叫我有以下的main.cpp文件:的main()似乎不能在QtCore列入

int main(int argc, char* argv[]) { 
    *(int*)(NULL) = 5; 
    delete (void*)(4); 
    throw int(0); 
    std::abort(); 
} 

這當然會導致崩潰。將下面的魔術線添加到頭文件的頂部:

#include <QtCore> 

無論我把什麼濫用放到main()中,程序都不會崩潰。結論:主要不被稱爲。

爲什麼..?

我的CMake的文件:

find_package(Qt5Widgets REQUIRED) 

set(CMAKE_AUTOMOC on) 

file(GLOB_RECURSE source_files *.cpp *.c) 

add_executable(myexec ${source_files}) 
qt5_use_modules(myexec Widgets) 

CMake的2.8.10(MSVS 11 Win64的),Qt的5.0.2

+1

你可以嘗試添加「#include 」而不是QtCore嗎? –

+0

@VaibhavDesai結果相同。 – user

+0

@VaibhavDesai我回來了。那是一個過時的可執行文件。只是'#include' QApplication頭部導致崩潰(主被調用)。但是,添加以下兩行,結果'main()'不會被調用:'QApplication app(argc,argv); return app.exec();'。據推測,在鏈接過程中會發生一些可疑的事情,我無法弄清楚。 – user

回答

0

與連接有問題。

我在可執行文件上運行了Dependency Walker,發現Qt5Widgets.dll文件沒有被我運行的shell找到。這顯然導致無聲的鏈接器錯誤。更新環境變量時問題得到解決。

道德故事:始終保持您的環境清潔,乾淨,最晚日期爲。 Windows 不是像Linux一樣好,不會告訴你如果找不到DLL的話。 < _ <