Chris Grimes
Chris Grimes

Reputation: 11

What libraries and include files are required for Google Protobuf v27.2 in a C++ program at compile, link and runtime?

Building on a ARM64 Macbook Pro (macos: sonoma 14.5) using Protobuf v27.2 in CLion. Built and installed protobuf per the Linux instructions:

cd protobuf [source directory]
cmake .
cmake --build --parallel 10
ctest --verbose [all tests passed]
sudo cmake --install . [libraries in /usr/local/lib and incudes in /usr/local/include]

proto Person class:

syntax = "proto3";

message Person {
    optional string name = 1;
    optional int32 id = 2;
    optional string email = 3;
}

CMakeList.txt:

cmake_minimum_required(VERSION 3.28)
project(protobuf)

set(CMAKE_CXX_STANDARD 20)

include_directories(/usr/local/include)

link_directories(/usr/local/lib)
link_libraries(libprotobuf.a)

add_executable(protobuf main.cpp Person.pb.cc Person.pb.h)

main.cpp:

#include <iostream>
#include "Person.pb.h"

int main() {
    std::cout << "Hello, World!" << std::endl;
    Person person;
    return 0;
}

During the link there are a number of unresolved variables associated with Person.pb.cc, Person.pb.h and main.cpp. What libraries and include files are missing from the CMakeList.txt file? Build Error:

====================[ Build | protobuf | Debug ]================================
/Applications/CLion.app/Contents/bin/cmake/mac/aarch64/bin/cmake --build /Users/achrisgrimes/CLionProjects/demo/protobuf/cmake-build-debug --target protobuf -j 8
[1/1] Linking CXX executable protobuf
FAILED: protobuf 
: && /usr/local/bin/g++ -g -arch arm64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.5.sdk -Wl,-search_paths_first -Wl,-headerpad_max_install_names  CMakeFiles/protobuf.dir/main.cpp.o CMakeFiles/protobuf.dir/Person.pb.cc.o -o protobuf -L/usr/local/lib -Wl,-rpath,/usr/local/lib  -lprotobuf && :
g++: warning: this compiler does not support Arm64 ('-arch' option ignored)
Undefined symbols for architecture x86_64:
  "__ZN4absl12lts_2024011612log_internal10LogMessage19CopyToEncodedBufferILNS2_10StringTypeE0EEEvNS0_11string_viewE", referenced from:
      __ZN4absl12lts_2024011612log_internal10LogMessagelsILi19EEERS2_RAT__Kc in Person.pb.cc.o
  "__ZN4absl12lts_2024011612log_internal10LogMessagelsImLi0EEERS2_RKT_", referenced from:
      __ZN4absl12lts_2024011612log_internal10LogMessagelsEm in Person.pb.cc.o
  "__ZN4absl12lts_2024011612log_internal15LogMessageFatalC1EPKciNS0_11string_viewE", referenced from:
      __ZN6google8protobuf8internal12ArenaAlignAsEm in Person.pb.cc.o
      __ZN6google8protobuf8internal12ArenaAlignAsEm in Person.pb.cc.o
      __ZNK6google8protobuf11MessageLite9ClassData4fullEv in Person.pb.cc.o
      __ZN6Person10SharedDtorEv in Person.pb.cc.o
      __ZN6Person9MergeImplERN6google8protobuf11MessageLiteERKS2_ in Person.pb.cc.o
      __ZN6Person12InternalSwapEPS_ in Person.pb.cc.o
  "__ZN4absl12lts_2024011612log_internal15LogMessageFatalD1Ev", referenced from:
      __ZN6google8protobuf8internal12ArenaAlignAsEm in Person.pb.cc.o
      __ZN6google8protobuf8internal12ArenaAlignAsEm in Person.pb.cc.o
      __ZN6google8protobuf8internal12ArenaAlignAsEm in Person.pb.cc.o
      __ZNK6google8protobuf11MessageLite9ClassData4fullEv in Person.pb.cc.o
      __ZNK6google8protobuf11MessageLite9ClassData4fullEv in Person.pb.cc.o
      __ZN6Person10SharedDtorEv in Person.pb.cc.o
      __ZN6Person10SharedDtorEv in Person.pb.cc.o
  "__ZN4absl12lts_2024011612log_internal17MakeCheckOpStringIPKvS4_EEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_T0_PKc", referenced from:
      __ZN4absl12lts_2024011612log_internal12Check_NEImplIPK6PersonPS3_EEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_RKT0_PKc in Person.pb.cc.o
      __ZN4absl12lts_2024011612log_internal12Check_EQImplIPN6google8protobuf5ArenaES6_EEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKT_RKT0_PKc in Person.pb.cc.o
  "__ZN4absl12lts_2024011612log_internal21CheckOpMessageBuilder7ForVar2Ev", referenced from:
      __ZN4absl12lts_2024011612log_internal17MakeCheckOpStringIyxEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_T0_PKc in Person.pb.cc.o
  "__ZN4absl12lts_2024011612log_internal21CheckOpMessageBuilder9NewStringB5cxx11Ev", referenced from:
      __ZN4absl12lts_2024011612log_internal17MakeCheckOpStringIyxEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_T0_PKc in Person.pb.cc.o
  "__ZN4absl12lts_2024011612log_internal21CheckOpMessageBuilderC1EPKc", referenced from:
      __ZN4absl12lts_2024011612log_internal17MakeCheckOpStringIyxEEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEET_T0_PKc in Person.pb.cc.o
  "__ZN6google8protobuf2io19EpsCopyOutputStream30WriteStringMaybeAliasedOutlineEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPh", referenced from:
      __ZN6google8protobuf2io19EpsCopyOutputStream23WriteStringMaybeAliasedEjRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPh in Person.pb.cc.o
  "__ZN6google8protobuf8internal14ArenaStringPtr3SetEN4absl12lts_2024011611string_viewEPNS0_5ArenaE", referenced from:
      __ZN6google8protobuf8internal14ArenaStringPtrC1EPNS0_5ArenaE in Person.pb.cc.o
  "__ZN6google8protobuf8internal14ArenaStringPtr3SetIJEEEvRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEPNS0_5ArenaE", referenced from:
      __ZN6Person9MergeImplERN6google8protobuf11MessageLiteERKS2_ in Person.pb.cc.o
      __ZN6Person9MergeImplERN6google8protobuf11MessageLiteERKS2_ in Person.pb.cc.o
  "__ZN6google8protobuf8internal26fixed_address_empty_stringB5cxx11E", referenced from:
      __ZN6google8protobuf8internal14ArenaStringPtrC1EPNS0_5ArenaE in Person.pb.cc.o
      __Person_default_instance_ in Person.pb.cc.o
      __Person_default_instance_ in Person.pb.cc.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.

Upvotes: 0

Views: 104

Answers (0)

Related Questions