【问题标题】:How to include POCO Library exactly?如何准确包含 POCO 库?
【发布时间】:2014-12-20 15:50:54
【问题描述】:

我遇到了一个小问题。 我正在开发一个名为 ghost++ 的现有项目。 我在 Ubuntu 1404 上工作。 我通过下载安装了 Poco,./configuremake -smake -s install

默认的 Makefile 如下所示:

SHELL = /bin/sh
SYSTEM = $(shell uname)
C++ = g++
CC = gcc
DFLAGS = -DGHOST_MYSQL
OFLAGS = -O3
LFLAGS = -L. -L../bncsutil/src/bncsutil/ -L../StormLib/stormlib/ -lbncsutil -lpthread -ldl -lz -lStorm -lmysqlclient_r -lboost_date_time-mt -lboost_thread-mt -lboost_system-mt -lboost_filesystem-mt
CFLAGS =

ifeq ($(SYSTEM),Darwin)
DFLAGS += -D__APPLE__
OFLAGS += -flat_namespace
else
LFLAGS += -lrt
endif

ifeq ($(SYSTEM),FreeBSD)
DFLAGS += -D__FREEBSD__
endif

ifeq ($(SYSTEM),SunOS)
DFLAGS += -D__SOLARIS__
LFLAGS += -lresolv -lsocket -lnsl
endif

CFLAGS += $(OFLAGS) $(DFLAGS) -I. -I../bncsutil/src/ -I../StormLib/

ifeq ($(SYSTEM),Darwin)
CFLAGS += -I../mysql/include/
endif

OBJS = bncsutilinterface.o bnet.o bnetprotocol.o bnlsclient.o bnlsprotocol.o commandpacket.o config.o crc32.o csvparser.o game.o game_admin.o game_base.o gameplayer.o gameprotocol.o gameslot.o ghost.o ghostdb.o ghostdbmysql.o ghostdbsqlite.o gpsprotocol.o language.o map.o packed.o replay.o savegame.o sha1.o socket.o stats.o statsdota.o statsw3mmd.o util.o
COBJS = sqlite3.o
PROGS = ./ghost++

all: $(OBJS) $(COBJS) $(PROGS)

./ghost++: $(OBJS) $(COBJS)
        $(C++) -o ./ghost++ $(OBJS) $(COBJS) $(LFLAGS)

clean:
        rm -f $(OBJS) $(COBJS) $(PROGS)

$(OBJS): %.o: %.cpp
        $(C++) -o $@ $(CFLAGS) -c $<

$(COBJS): %.o: %.c
        $(CC) -o $@ $(CFLAGS) -c $<

./ghost++: $(OBJS) $(COBJS)

all: $(PROGS)

bncsutilinterface.o: ghost.h includes.h util.h bncsutilinterface.h
bnet.o: ghost.h includes.h util.h config.h language.h socket.h commandpacket.h ghostdb.h bncsutilinterface.h bnlsclient.h bnetprotocol.h bnet.h map.h packed.h savegame.h replay.h gameprotocol.h game_base.h
bnetprotocol.o: ghost.h includes.h util.h bnetprotocol.h
bnlsclient.o: ghost.h includes.h util.h socket.h commandpacket.h bnlsprotocol.h bnlsclient.h
bnlsprotocol.o: ghost.h includes.h util.h bnlsprotocol.h
commandpacket.o: ghost.h includes.h commandpacket.h
config.o: ghost.h includes.h config.h
crc32.o: ghost.h includes.h crc32.h
csvparser.o: csvparser.h
game.o: ghost.h includes.h util.h config.h language.h socket.h ghostdb.h bnet.h map.h packed.h savegame.h gameplayer.h gameprotocol.h game_base.h game.h stats.h statsdota.h statsw3mmd.h
game_admin.o: ghost.h includes.h util.h config.h language.h socket.h ghostdb.h bnet.h map.h packed.h savegame.h replay.h gameplayer.h gameprotocol.h game_base.h game_admin.h
game_base.o: ghost.h includes.h util.h config.h language.h socket.h ghostdb.h bnet.h map.h packed.h savegame.h replay.h gameplayer.h gameprotocol.h game_base.h next_combination.h
gameplayer.o: ghost.h includes.h util.h language.h socket.h commandpacket.h bnet.h map.h gameplayer.h gameprotocol.h gpsprotocol.h game_base.h
gameprotocol.o: ghost.h includes.h util.h crc32.h gameplayer.h gameprotocol.h game_base.h
gameslot.o: ghost.h includes.h gameslot.h
ghost.o: ghost.h includes.h util.h crc32.h sha1.h csvparser.h config.h language.h socket.h ghostdb.h ghostdbsqlite.h ghostdbmysql.h bnet.h map.h packed.h savegame.h gameplayer.h gameprotocol.h gpsprotocol.h game_base.h game.h game_admin.h
ghostdb.o: ghost.h includes.h util.h config.h ghostdb.h
ghostdbmysql.o: ghost.h includes.h util.h config.h ghostdb.h ghostdbmysql.h
ghostdbsqlite.o: ghost.h includes.h util.h config.h ghostdb.h ghostdbsqlite.h
gpsprotocol.o: ghost.h util.h gpsprotocol.h
language.o: ghost.h includes.h config.h language.h
map.o: ghost.h includes.h util.h crc32.h sha1.h config.h map.h
packed.o: ghost.h includes.h util.h crc32.h packed.h
replay.o: ghost.h includes.h util.h packed.h replay.h gameprotocol.h
savegame.o: ghost.h includes.h util.h packed.h savegame.h
sha1.o: sha1.h
socket.o: ghost.h includes.h util.h socket.h
stats.o: ghost.h includes.h stats.h
statsdota.o: ghost.h includes.h util.h ghostdb.h gameplayer.h gameprotocol.h game_base.h stats.h statsdota.h
statsw3mmd.o: ghost.h includes.h util.h ghostdb.h gameprotocol.h game_base.h stats.h statsw3mmd.h
util.o: ghost.h includes.h util.h

我尝试将 LFLAGS 修改为以下行:

LFLAGS = -I/usr/local/share/Poco/include -L. -L../bncsutil/src/bncsutil/ -L../StormLib/stormlib/ -L/usr/local/share/Poco/lib -lPocoNet -lbncsutil -lpthread -ldl -lz -lStorm -lmysqlclient_r -lboost_date_time-mt -lboost_thread-mt -lboost_system-mt -lboost_filesystem-mt

我的目标是现在使用该库发送邮件: http://pocoproject.org/docs/Poco.Net.SMTPClientSession.html

所以我将它包含在我的一个函数中:

MailMessage msg;
msg.addRecipient (MailRecipient (MailRecipient::PRIMARY_RECIPIENT,
                                       "bob@example.com", "Bob"));
msg.setSender ("Me <me@example.com>");
msg.setSubject ("Subject");
msg.setContent ("Content");

SMTPClientSession smtp ("mail.example.com");
smtp.login ();
smtp.sendMessage (msg);
smtp.close ();

但是当我尝试编译这个时,我得到了未定义的错误:

ghost.cpp:1581:1: error: 'MailMessage' was not declared in this scope
 MailMessage msg;
 ^

我在这里错过或忘记了什么?我可能是第一次与 POCO 合作。

【问题讨论】:

  • 假设您已包含正确的 POCO 标头,您缺少使用正确的命名空间 Poco::Net 指定 MailMessagePoco::Net::MailMessage msg;
  • 这就是我错过的,我没有包含标题,并且 ns 也丢失了。谢谢
  • 我现在已经回答了这个问题。您的问题中不需要所有这些 makefile 内容,除了显示 -I 选项之外,它是无关紧要的。

标签: c++ poco-libraries


【解决方案1】:

要使用 POCO 中的这些类,您需要包含包含其声明的头文件,并指定声明它们的实际命名空间

#include <Poco/Net/MailMessage.h>
#include <Poco/Net/SMTPClientSession.h>

// ....


Poco::Net::MailMessage msg;
msg.addRecipient (MailRecipient (MailRecipient::PRIMARY_RECIPIENT,
                                       "bob@example.com", "Bob"));
msg.setSender ("Me <me@example.com>");
msg.setSubject ("Subject");
msg.setContent ("Content");

Poco::Net::SMTPClientSession smtp ("mail.example.com");
smtp.login ();
smtp.sendMessage (msg);
smtp.close ();

【讨论】:

  • 也感谢您的回答。但是我又遇到了一个问题,在编译并尝试运行后,它直接中断,原因如下:./ghost++: error while loading shared libraries: libPocoNet.so.17: cannot open shared object file: No such file or directory 这里缺少什么?我在以下目录中有这个文件:/usr/local/lib
猜你喜欢
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多