簡體   English   中英

如果在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM