如果在Qt Creator中编译,库函数的行为会有所不同

时间:2016-02-24 14:10:52

标签: qt gcc g++

我有一个c程序,如果我使用此命令在shell中构建它:

gcc -o simpledemo -fpic -fsigned-char -DPLATFORM_LINUX -Iinclude/ simpledemo.c ../AcapelaLibs/libbabile.a -lstdc++

它编译,运行并产生预期的输出。

gcc info:

/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命令而做的事情:

<{1>}文件中的

.pro

我认为QMAKE_CXXFLAGS += -DPLATFORM_LINUX INCLUDEPATH += $$PWD/include/ 是可以的,因为我可以从我的代码中访问那里的文件(它们是可识别的)。

请注意,在shell编译中我使用了库INCLUDEPATH,因此在Qt中我点击添加库... 并选择相同的库,然后Qt将其添加到{ {1}}文件。在这里,我可以从我的代码中访问库函数。

问题是,如果我从Qt编译并运行(或在Qt中编译并从shell运行), libbabile.a 中的函数将返回NULL。

两种方法之间的区别是什么使其中一种成功而另一种失败?

1 个答案:

答案 0 :(得分:1)

  

如果在Qt Creator中编译,库函数的行为会有所不同。一世   认为它可能是编译器标志的东西。

     

哪些编译器标志与命令行中使用的不同?

您可以检查Qt Creator compiler output 并获取从那里指定的所有编译器选项。然后,您可以将这些选项与预期的选项集进行比较,并在项目.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

对于调试和释放模式以及单独的。