请原谅,如果这个问题真的很愚蠢 - 我没有设法找到任何东西。我发现了所有关于库的文章,其中介绍了项目文件中单个库附件语法的简单情况,并且都没有考虑将静态库与其他实现文件一起添加到静态库中。所以这里的这个问题对我来说是最后的...静态库中的静态库(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不能胜任吗?如果没有,那么这个图书馆怎么会被构建成可编译的状态呢?
非常感谢任何人敢于澄清这个问题=)。 (或者如果我真的值得拥有它,我的头上会有一些东西)
您需要为项目设置系统包含路径,以便生成的文件可以找到协议缓冲区库标头。 –