請原諒,如果這個問題真的很愚蠢 - 我沒有設法找到任何東西。我發現了所有關於庫的文章,其中介紹了項目文件中單個庫附件語法的簡單情況,並且都沒有考慮將靜態庫與其他實現文件一起添加到靜態庫中。所以這裏的這個問題對我來說是最後的...靜態庫中的靜態庫(Protobuff):「沒有這樣的文件或目錄」
我將首先描述情況,問題將在本文末尾,所以如果你想避免BS請向下滾動。
簡介: 我使用QT Creator 4.1(QT 5.6.2,MinGW 4.9.2 32位,qmake)在Windows 7 64bit上工作。 作爲我的學校項目,我做了一個簡單的控制檯聊天,它使用Google Protobuff庫(我內心的一個無知懶惰的惡魔每次提到該庫時都會吐出詛咒,因爲我花了將近4天的時間試圖編譯protoc.exe並使其工作)。幸運的是,我得到了這個聊天,時間到了將Protobuff .h和.cpp文件與所有可共享代碼一起移動到一個靜態庫中。現在,那部分比安裝protoc.exe更有希望。
我做了什麼:
在MSYS做出libprotobuf.a。
使用protoc。 exe我創建了兩個文件:messageformat.pb.cc和messageformat.pb.h
使用QT Creator的「添加新...」嚮導創建一個靜態庫「ChatLib」。該庫是用於Protobuff文件的。
在「ChatLib」我使用的標準Qt Creator中的「添加庫」嚮導,並刪除了一些產生線(我確信這種缺失沒有影響後),以便有
只有以下行左:
QT -= gui
TARGET = ChatLib
TEMPLATE = lib
CONFIG += staticlib
SOURCES += \
messageformat.pb.cc
HEADERS += \
messageformat.pb.h
INCLUDEPATH += "F:/Files/protobuf/src" //that folder holds .h files used in messageformat.pb.h and messageformat.pb.cc
LIBS += -L$$PWD/../../../../../Files/protobuf/src/ -lprotobuf
PRE_TARGETDEPS += $$PWD/../../../../../Files/protobuf/src/libprotobuf.a
在我的主要項目添加此「ChatLib」庫到項目文件I加入的Protobuf庫的「ChatLib」庫中的相同的方式:
QT + =核心 QT - = GUI
CONFIG += c++11 TARGET = GooglePain CONFIG += console CONFIG -= app_bundle TEMPLATE = app SOURCES += main.cpp //the folder below holds "ChatLib/messageformat.pb.h" and "ChatLib/messageformat.pb.cc". //The former ("ChatLib/messageformat.pb.h") is included into main.cpp INCLUDEPATH += "F:/Programming/Qt/Projects" LIBS += -L$$PWD/../build-ChatLib-Desktop_Qt_5_6_2_MinGW_32bit-Debug/release/ -lChatLib PRE_TARGETDEPS += $$PWD/../build-ChatLib-Desktop_Qt_5_6_2_MinGW_32bit-Debug/debug/libChatLib.a
在我的main.cpp我列入 「ChatLib/messageformat.pb.h」。
- 我穿過我的原住民,說一個祈禱,敲木頭,站在一條腿上,在跳紙尿褲和唱「衝浪鳥」一分鐘後打了一個鼓,並開始了該計劃。
- 收到以下錯誤:
:
F:\Programming\Qt\Projects\ChatLib\messageformat.pb.h:9: error: google/protobuf/stubs/common.h: No such file or directory
\#include <google/protobuf/stubs/common.h>
發生了什麼事是,編譯看着 「ChatLib/messageformat.pb.h」,找到的第一個參考的.h位於文件我在步驟4中包含的路徑,並表示他不能找到他,儘管該文件存在。同樣的事情發生在所有。h文件包含在那裏(如果我註釋掉第一個參考編譯器只是抱怨下一個)。就好像在路上有某種衝突,但我找不到一個。
現在我的問題是:我在那裏做錯了什麼?這種靜態圖書館「初始」是一種很好的做法,還是甚至有可能做到這一點? 那位叫我做這件事的人對qmake不熟悉,因爲他在使用cmake,他告訴我那裏支持鏈依賴。難道qmake不能勝任嗎?如果沒有,那麼這個圖書館怎麼會被構建成可編譯的狀態呢?
非常感謝任何人敢於澄清這個問題=)。 (或者如果我真的值得擁有它,我的頭上會有一些東西)
您需要爲項目設置系統包含路徑,以便生成的文件可以找到協議緩衝區庫標頭。 –