[英]Qt app on Windows 10 behaves differently when launched from Qt Creator
[英]Library function behaves differently if compiled in Qt Creator
我有一个c
程序,如果我使用以下命令在shell中构建它:
gcc -o simpledemo -fpic -fsigned-char -DPLATFORM_LINUX -Iinclude/ simpledemo.c ../AcapelaLibs/libbabile.a -lstdc++
它编译,运行并产生预期的输出。
gcc信息:
/usr/bin/gcc
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4
但是,如果我使用Qt Creator(Qt 5.5.1)进行编译,它将编译并运行,但是我使用的库的函数会返回NULL值。
Qt使用以下g++
:
/usr/bin/g++
g++ (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4
我认为可能与编译器标志有关。 这是我在Qt中所做的,以匹配shell命令:
在.pro
文件中:
QMAKE_CXXFLAGS += -DPLATFORM_LINUX
INCLUDEPATH += $$PWD/include/
我认为INCLUDEPATH
是可以的,因为我可以从代码中访问文件(它们是可识别的)。
并注意在shell编译中,我使用一个库../AcapelaLibs/libbabile.a
,因此在Qt中,我单击Add Library ...并选择相同的库,然后Qt将其添加到.pro
文件中。 同样在这里,我可以从代码中访问库函数。
问题是,如果我从Qt编译并运行(或在Qt中编译并从shell运行),那么来自libbabile.a的函数将返回NULL。
使两种方法中的一种成功而另一种失败的方法有什么区别?
如果在Qt Creator中进行编译,则库函数的行为会有所不同。 我认为可能与编译器标志有关。
哪些编译器标志与命令行中使用的标志不同?
您可以检查Qt Creator 编译器输出,并从那里获取所有指定的编译器选项。 然后,您可以将这些选项与期望的选项集进行比较,并有意在项目.pro文件中添加或删除这些选项:
# C++ flags
QMAKE_CXXFLAGS += -opt1 -opt2 # add
QMAKE_CXXFLAGS -= -opt1 -opt2 # remove
QMAKE_CXXFLAGS_RELEASE += -opt1 -opt2 # add
QMAKE_CXXFLAGS_RELEASE -= -opt1 -opt2 # remove
QMAKE_CXXFLAGS_DEBUG += -opt1 -opt2 # add
QMAKE_CXXFLAGS_DEBUG -= -opt1 -opt2 # remove
# C flags, slightly different macro
QMAKE_CFLAGS += -opt1 -opt2 # mind add/remove/debug/release
分别用于调试和发布模式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.