1
我正在運行與gcc的Ubuntu 16.04。編譯protobuf失敗與D_GLIBCXX_USE_CXX11_ABI = 0
我q.ccp
文件是用於編譯
#include <google/protobuf/generated_message_util.h>
#include <google/protobuf/repeated_field.h>
#include <google/protobuf/extension_set.h>
#include <google/protobuf/generated_message_reflection.h>
#include <google/protobuf/generated_message_util.h>
#include <google/protobuf/stubs/common.h>
#include <google/protobuf/descriptor.h>
int main(int argc, char **argv)
{
google::protobuf::Message* msg;
const google::protobuf::Descriptor* message_desc = msg->GetDescriptor();
const google::protobuf::FieldDescriptor * fd_name = message_desc->FindFieldByName("name");
return 0;
}
命令:
g++ -D_GLIBCXX_USE_CXX11_ABI=0 q.cpp -L/usr/lib/x86_64-linux-gnu /usr/local/lib/libprotobuf.a -lpthread
protoc --version
回報:2.2.0
的gcc --version
gcc (Ubuntu 4.8.5-4ubuntu2) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
編譯錯誤:
/tmp/cciGJPqq.o: In function `main':
q.cpp:(.text+0x5f): undefined reference to `google::protobuf::Descriptor::FindFieldByName(std::string const&) const'
collect2: error: ld returned 1 exit status
但是,當我離開-D_GLIBCXX_USE_CXX11_ABI=0
選項,我沒有得到任何編譯錯誤。但問題是我在不同的系統上運行可執行文件,需要使用該選項編譯程序才能運行。
可能重複[什麼是未定義的引用/未解析的外部符號錯誤,我該如何解決它?](http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-外部符號錯誤和怎麼辦我修復) – Danh
@Danh,來吧人,至少讀完整個問題。你真的很認真嗎? – v78
我不會改變我的決定,事實是g ++已經做出了ABI變更,您的程序需要與您的庫編譯相同的ABI – Danh