protobuf的库为什么一直提示无法解析外部符号号错误

protobuf在使用时出现的问题小汇总
时间: 13:17:32
&&&& 阅读:3307
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&  文章开头放一下IBM的google protocol buffer的介绍链接。
  对于这种技术不断更新的东西,我只能这么理解:因为技术在更新,版本在变化,之前很详尽的技术博文可能在之后的版本中遇到无法预知的问题,所以我们在使用时要注意甄别。废话不多说,进入正文部分。
  安装什么的都是小问题了,还是贴一下步骤吧。
tar -xzf protobuf-2.5.0.tar.gz
cd protobuf-2.5.0
./configure --prefix=$INSTALL_DIR
make check
make install
  很简单的标准*nix的安装方法。随后将安装目录的bin目录下的protoc创建一个软连接到/usr/bin目录下即可。
  随后可以进行简单的例子测试了。我这里有一个测试例子:
file:base.taskinfo.proto
package base;
message funcinfo
funchandle = 1;//处理函数列表
funcinit = 2;
//初始化函数
funcclean = 3;
//清理函数
message taskinfo
taskid = 1;
pidcount = 2;
//进程数目
filepath = 3;
//输入文件路径
filename = 4;
temppath = 5;
//临时文件路径
scriptpath = 6; //脚本路径
funcinfo func = 7;
//函数信息
required string redisconn = 8;
//redis链接ip及port
  然后用它来生成c++类型的相对应的文件:protoc --cpp_out=./ base.taskinfo.proto
  就生成了两个标准c++的头文件和源文件:base.taskinfo.pb.cc& base.taskinfo.pb.h
  然后就可以写简单的例子进行测试了,这里写了一个叫write.cpp的简单例子:(以下****部分涉及个人隐私,避免被人肉)
#include "base.taskinfo.pb.h"
#include &iostream&
#include &fstream&
using namespace
int main()
base::funcinfo func;
func.set_funchandle("GetKeyVal");
base::taskinfo msg1;
msg1.set_taskid(1);
msg1.set_pidcount(3);
msg1.set_filepath("/data/home/****/data/basetest/indir");
msg1.set_filename("CH_PW_WAY");
msg1.set_temppath("/data/home/****/data/basetest/tmpdir");
msg1.set_scriptpath("/data/home/****/data/basetest/perl/CH_PW_WAY.pl");
msg1.set_allocated_func(&func);
msg1.set_redisconn("10.200.25.155:7379");
fstream output("./log", ios::out | ios::trunc | ios::binary);
if (!msg1.SerializeToOstream(&output)) {
cerr&&"Failed to write msg."&&
return -1;
  然后就可以写个Makefile去编译这1个cpp,1个cc和1和h文件(protoc生成的.cc文件)
#makefile by ****
#日09:07:28
cpp = -fPIC -Wall -g
inc += -I./
inc += -I/soft/protobuf-2.5.0/include
libs += -L/soft/protobuf-2.5.0/lib -lprotobuf -lpthread
objs=$(patsubst %.cc,%.o, $(wildcard *.cc))
objs+=$(patsubst %.cpp,%.o, $(wildcard *.cpp))
$(cc) $(cpp) $(inc) -o $@ -c $&
@echo "$@"
$(cc) $(cpp) $(inc) -o $@ -c $&
@echo "$@"
module=./writer
all:$(module)
$(module):$(objs)
$(cc) $(cpp) $(inc) -o $(module) $^ $(libs)
@echo "$@"
@rm -f $(objs) $(module)
@echo "clean done."
编译没问题,然后很快乐的就生成了可执行文件
随后就是 执行,让他生成log文件就行了,执行的时候出现了无法找到lib的错误,好吧,把刚才的安装目录下的lib目录添加到环境变量$LD_LIBRARY_PATH中去,再执行就出现了:
*** glibc detected *** ./writer: munmap_chunk(): invalid pointer: 0x00007fff ***======= Backtrace: =========/lib64/libc.so.6(+0x7fa138d93358]./writer[0x4046f1]./writer[0x403732]./writer[0x4044ae]./writer[0x409010]/lib64/libc.so.6(__libc_start_main+0xe6)[0x7fa138d3cc36]./writer[0x403099]======= Memory map: ========
..以下省略数千个字符。总之就是core掉了。试试gdb工具,调试结果如下所示:
Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2
Try: zypper install -C "debuginfo(build-id)=c81de241adbfde0f0e0e236f9a6554e6"
Core was generated by `./writer‘.
Program terminated with signal 6, Aborted.
0x00007fad42931b55 in raise () from /lib64/libc.so.6
0x00007fad42931b55 in raise () from /lib64/libc.so.6
0x00007fad in abort () from /lib64/libc.so.6
0x00007fad4296ec2f in __libc_message () from /lib64/libc.so.6
0x00007fad in malloc_printerr () from /lib64/libc.so.6
0x46e1 in base::funcinfo::~funcinfo (this=0x7fff, __in_chrg=&optimized out&) at base.taskinfo.pb.cc:167
0x3722 in base::taskinfo::SharedDtor (this=0x7fff) at base.taskinfo.pb.cc:537
0x449e in base::taskinfo::~taskinfo (this=0x7fff, __in_chrg=&optimized out&) at base.taskinfo.pb.cc:517
0x9000 in main () at writer.cpp:25
应该是析构函数出错了,看一下到底protoc给我们生成了什么东西吧。这段代码摘自base.taskinfo.pb.cc
void taskinfo::SharedDtor() {
if (filepath_ != &::google::protobuf::internal::kEmptyString) {
delete filepath_;
if (filename_ != &::google::protobuf::internal::kEmptyString) {
delete filename_;
if (temppath_ != &::google::protobuf::internal::kEmptyString) {
delete temppath_;
if (scriptpath_ != &::google::protobuf::internal::kEmptyString) {
delete scriptpath_;
if (redisconn_ != &::google::protobuf::internal::kEmptyString) {
delete redisconn_;
if (this != default_instance_) {
delete func_;
我擦。(请原谅我的粗鲁),居然是delete func_,我顿时就不能淡定了。我申请的是栈内存,你给我来个delete,不core才怪了~好吧,请原谅我没有看你这个生成的1061行的源代码。
改一下上面的write.cpp的代码:
#include "base.taskinfo.pb.h"
#include &iostream&
#include &fstream&
using namespace
int main()
base::funcinfo *func = new base::funcinfo();
func-&set_funchandle("GetKeyVal");
base::taskinfo *msg1 = new base::taskinfo();
msg1-&set_taskid(1);
msg1-&set_pidcount(3);
msg1-&set_filepath("/data/home/****/data/basetest/indir");
msg1-&set_filename("CH_PW_WAY");
msg1-&set_temppath("/data/home/****/data/basetest/tmpdir");
msg1-&set_scriptpath("/data/home/****/data/basetest/perl/CH_PW_WAY.pl");
msg1-&set_allocated_func(func);
msg1-&set_redisconn("10.200.25.155:7379");
fstream output("./log", ios::out | ios::trunc | ios::binary);
if (!msg1-&SerializeToOstream(&output)) {
cerr&&"Failed to write msg."&&
return -1;
好 编译运行没问题了,都解决了。生成了一个log文件,这文件没办法看了。内容按照他自己的格式写的,有一些乱码和一些能看得懂的,自己写进去的东西。标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:/t26502/p/4200745.html
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!protobuf的库为什么一直提示外部符号错误
#include&"person.pb.h"
using&namespace&
#pragma&comment(lib,"libprotobufd.lib")
#pragma&comment(lib,"libprotocd.lib")
int&main()
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK1120 2&个无法解析的外部命令 Protote C:\Users\JiangXinBin\Documents\Visual&Studio&2015\Projects\Protote\x64\Debug\Protote.exe 1
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号&"public:&virtual&__cdecl&tutorial::Person::~Person(void)"&(??1Person@tutorial@@UEAA@XZ),该符号在函数&main&中被引用 Protote C:\Users\JiangXinBin\Documents\Visual&Studio&2015\Projects\Protote\Protote\main.obj 1
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号&"public:&__cdecl&tutorial::Person::Person(void)"&(??0Person@tutorial@@QEAA@XZ),该符号在函数&main&中被引用 Protote C:\Users\JiangXinBin\Documents\Visual&Studio&2015\Projects\Protote\Protote\main.obj 1
后两个错误提示的是无法找到Person类的默认构造函数和析构函数,你是用的别人的库的话应该是链接文件没弄好
指的时lib文件?
引用&1&楼&cyfcsd&的回复:
后两个错误提示的是无法找到Person类的默认构造函数和析构函数,你是用的别人的库的话应该是链接文件没弄好
现在错误变了:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2001 无法解析的外部符号&"class&google::protobuf::internal::ExplicitlyConstructed&class&std::basic_string&char,struct&std::char_traits&char&,class&std::allocator&char&&&&&&google::protobuf::internal::fixed_address_empty_string"&(?fixed_address_empty_string@internal@protobuf@google@@3V?$ExplicitlyConstructed@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@123@A) Protote C:\Users\JiangXinBin\Documents\Visual&Studio&2015\Projects\Protote\Protote\person.pb.obj 1
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2001 无法解析的外部符号&"private:&static&bool&google::protobuf::io::CodedOutputStream::default_serialization_deterministic_"&(?default_serialization_deterministic_@CodedOutputStream@io@protobuf@google@@0_NA) Protote C:\Users\JiangXinBin\Documents\Visual&Studio&2015\Projects\Protote\Protote\person.pb.obj 1
别沉啊,问题没解决
程序自删除技术实现源码分享和技术实现详细
关于字符串输出问题
钩子拦截Notepad中WM_COMMA
读取文件 c语言
c语言do wile 循环条件用int
c语言数据的读取
求助 关于strcmp函数
删除单链表中data介于mink和max
Python自学笔记——流程设计以及函数
项目工程是UNICODE编码,通过获取的
你必须知道的程序那些事:扩展名和格式的区
实现窗口透明(透明窗口和不规则窗口)的原
c/c++ free释放二级指针时出错,
关于复制构造函数的调用
vs2010的错误 求大神帮帮忙
C++写作业时的错误,关于构造函数
生成一个指定频率的wav文件
如何建立一个map,second值是函数
关于c++路径问题
全面梳理关系型数据库和 NoSQL 的使
。。。private多继承在用using
完美记事之富文本框CRichEditCt
《RS485/RS232不同平台的测试程
数据结构,链表归并的一些问题是在==实在
关于求子串的算法,我写了代码,为什么运行
fprintf 写字符串到文件 诡异事情
请问下服务程序能接收一个自定义的消息吗?
之前的万年历 修正版
如何实现实时统计速度
关于Linux文件权限——个人总结观点
祝大家新年快乐。
祝各位新年快乐,身体健康,万事如意。送波...
为啥10%的磁盘碎片整理不了
可能是交换文件等系统文件。...
热烈庆祝本人受关注人数即将突破12000
祝C/C++er们2017 Hold住*...
程序员不懒惰!2017,软考为你升职加薪
软考是什么
引用软考指的是国家系统集成...
fgets()读取文件问题
windows vs 2012下用C写程...
CString需要什么头文件?
VS2010原生C++开发,CStrin...
求助qwq如何在c++创建一个字母数组,...
QTabWidget下面图标太多,如何让
写的一个tabwidget,但是每个Ta...
一些编程的零碎问题如:VS2013的使用
本帖最后由longear100于2017...
static_cast(ex
我想问下各位大神:为什么我用is_rva...
我们之前报道过SurgicalTheater这家专注于使用VR设备进行外科手术的...
从浅层次来说,人类造机器人的初衷可能有二,一是解放人类的劳动力,二是帮助人类去做...
IT之家讯 孕妇在公共场合自然是受到广泛照顾的群体,就拿乘坐公共交通来说,不管是...
东京某间医院的一位病人,病人在手术中途放屁,这个屁碰巧被一位外科医师在做手术时使...
10月12日消息据英国每日邮报报道,此前的科学界一直认为胎儿在21天之后才开始产...
12年前,33岁产妇利用试管婴儿技术,成功生下一个男孩,多余的11个胚胎被冷冻储...
package com.lcfuture.import...
我们都在讲内/news/容为王,可好多...
原本是用被注释掉的数据构成的,现在如何换成sqllite的数据啊,尝试了很多办法...
NOTE: This project contains Java compila...
我想在sqlite中存储图片,类型是BLOB,代码是这样的:可是出错却总是:网上...
typedef struct tagLYDATA{const LYCPINFO ...
MainActivity.java源码:public class MainAct...
本帖最后由specter-02-编辑遇到一...
源代码:#include "person.pb.h"using namespac...
2月8日12时起,Facebook“暂停所有中国区工具类应用广告”,在向某家广告...
金鱼的寿命长短与其饲养条件及鱼体体质有关,一般人认为金鱼寿命只有6-7年,但有人...
(公众号:雷锋网)消息:2月10日,英特尔在投资者会议上正式发布了第8代酷睿处理...
因为被购物网站宣传的限时限量的优惠活动吸引,李先生一口气在某购物网站购置了4台热...
喙、中空质轻的骨头、羽毛、飞行能力……这些鸟类区别于其他物种的特征是如何演化形成...

我要回帖

更多关于 无法解释的外部符号 的文章

 

随机推荐