Невозможно скомпилировать пример из буферов протокола Google

Я grep для других тем, но они не помогают мне = (. На моем рабочем сервере у меня нет привилегий sudo, поэтому я устанавливаю PB с помощью

./configure --prefix =/home/username/local

Затем я создаю исходные файлы с примером "person" и успешно скомпилирую его с протоком.

У меня нет pkg-info = (я пытаюсь скомпилировать его с помощью

g++ -I/home/username/local/include -L/home/имя пользователя /local/lib -lprotobuf -lpthread main.cpp person.pb.cc

а затем иметь миллиард симулятивных ошибок, т.е.

person.pb.cc:(. текст + 0x4cf): undefined ссылка на `Google:: Protobuf:: внутренний:: kEmptyString

Я думаю, что это проблема со связью, но как ее решить?

echo $LD_LIBRARY_PATH /Главная/имя пользователя/локальные/Библиотека

в main.cpp:

#include "person.pb.h"
...

Спасибо.

Ответ 1

Поместите библиотеку в конец:

g++ -I/home/username/local/include -L/home/username/local/lib main.cpp person.pb.cc -lprotobuf -pthread

От Параметры ссылки GCC:

-llibrary
-l library
    Search the library named library when linking. 
    (The second alternative with the library as a separate argument
    is only for POSIX compliance and is not recommended.)

    It makes a difference where in the command you write this option;
    the linker searches and processes libraries and object files in the
    order they are specified.
    Thus, `foo.o -lz bar.o' searches library `z' after file foo.o but
    before bar.o. If bar.o refers to functions in `z', those functions
    may not be loaded.

Кроме того, используйте -pthread вместо -lpthread, поскольку -pthread может устанавливать флаги для препроцессора и компоновщика.

Ответ 2

Флаги связывания библиотек идут в конце аргументов компилятора:

g++ -I/home/username/local/include -L/home/username/local/lib main.cpp person.pb.cc -lprotobuf -lpthread