• ubuntu netbeans compile ygopro client with google protobuf lib


    environment:

    ubuntu 16.04

    netbeans 8.2

    ygopro Fluorohydride with Irrlicht Game Engine

    问题1: google protobuf 提示 string ambiguous, string 类型和 Irrlicht 引擎冲突。

    尝试的方法:

    1、修改protobuf源码 string -> ::std::string。(冲突项太多,放弃这个方法。)

    2、调整编译顺序,将pb.h放到include顶部,优先编译。

    问题2: google protobuf 提示 不允许-fno-rtti

    解决方法: CFLAGS 移除 -fno-rtti

    问题3: netbeans IDE 导入 ygopro cpp 项目 from makefile,编译单个文件 通过,编译项目 通过,链接protobuf失败,提示 “undefined reference to `tutorial::Person_PhoneNumber::Person_PhoneNumber()'”。

    尝试的方法:

    `pkg-config --cflags --libs protobuf`

    CFLAGS/CXXFLAGS/CXXFLAGS/LIBS += -D_GLIBCXX_USE_CXX11_ABI=0 -lprotobuf

    LDDEPS += /usr/local/lib/libprotobuf.a /usr/local/lib/libprotobuf.so

    @echo $(LINKCMD) 查看g++链接命令

    添加生成obj: addressbook.pb.o

    # GNU Make project makefile autogenerated by Premake
    ifndef config
      config=debug
    endif
    
    ifndef verbose
      SILENT = @
    endif
    
    ifndef CC
      CC = gcc
    endif
    
    ifndef CXX
      CXX = g++
    endif
    
    ifndef AR
      AR = ar
    endif
    
    ifeq ($(config),debug)
      OBJDIR     = ../obj/Debug/ygopro
      TARGETDIR  = ../bin/debug
      TARGET     = $(TARGETDIR)/ygopro
      DEFINES   += -DLUA_USE_LINUX -D_DEBUG
      INCLUDES  += -I../ocgcore -I/usr/include/lua -I/usr/include/lua5.2 -I/usr/include/lua/5.2 -I/usr/include/irrlicht -I/usr/include/freetype2
      CPPFLAGS  += -MMD -MP $(DEFINES) $(INCLUDES)
      CFLAGS    += $(CPPFLAGS) $(ARCH) -g -fno-strict-aliasing -Wno-multichar -std=gnu++0x
      CXXFLAGS  += $(CFLAGS)
      LDFLAGS   += -L../bin/debug
      LIBS      += -locgcore -lclzma -lIrrlicht -lfreetype -lsqlite3 -llua -levent -levent_pthreads -lGL -ldl -lpthread
      RESFLAGS  += $(DEFINES) $(INCLUDES) 
      LDDEPS    += ../bin/debug/libocgcore.a ../bin/debug/libclzma.a 
      LINKCMD    = $(CXX) -o $(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(ARCH) $(LIBS) /usr/local/lib/libprotobuf.a /usr/local/lib/libprotobuf.so
      define PREBUILDCMDS
      endef
      define PRELINKCMDS
      endef
      define POSTBUILDCMDS
      endef
    endif
    
    ifeq ($(config),release)
      OBJDIR     = ../obj/Release/ygopro
      TARGETDIR  = ../bin/release
      TARGET     = $(TARGETDIR)/ygopro
      DEFINES   += -DLUA_USE_LINUX -DNDEBUG
      INCLUDES  += -I../ocgcore -I/usr/include/lua -I/usr/include/lua5.2 -I/usr/include/lua/5.2 -I/usr/include/irrlicht -I/usr/include/freetype2
      CPPFLAGS  += -MMD -MP $(DEFINES) $(INCLUDES)
      CFLAGS    += $(CPPFLAGS) $(ARCH) -g -O3 -fno-strict-aliasing -Wno-multichar -march=native -std=gnu++0x -fno-rtti
      CXXFLAGS  += $(CFLAGS) 
      LDFLAGS   += -L../bin/release
      LIBS      += -locgcore -lclzma -lIrrlicht -lfreetype -lsqlite3 -llua -levent -levent_pthreads -lGL -ldl -lpthread -lprotobuf
      RESFLAGS  += $(DEFINES) $(INCLUDES) 
      LDDEPS    += ../bin/release/libocgcore.a ../bin/release/libclzma.a
      LINKCMD    = $(CXX) -o $(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(ARCH) $(LIBS)
      define PREBUILDCMDS
      endef
      define PRELINKCMDS
      endef
      define POSTBUILDCMDS
      endef
    endif
    
    OBJECTS := 
        $(OBJDIR)/duelclient.o 
        $(OBJDIR)/deck_con.o 
        $(OBJDIR)/client_field.o 
        $(OBJDIR)/single_duel.o 
        $(OBJDIR)/materials.o 
        $(OBJDIR)/netserver.o 
        $(OBJDIR)/replay_mode.o 
        $(OBJDIR)/CGUITTFont.o 
        $(OBJDIR)/single_mode.o 
        $(OBJDIR)/menu_handler.o 
        $(OBJDIR)/event_handler.o 
        $(OBJDIR)/gframe.o 
        $(OBJDIR)/data_manager.o 
        $(OBJDIR)/image_manager.o 
        $(OBJDIR)/deck_manager.o 
        $(OBJDIR)/replay.o 
        $(OBJDIR)/client_card.o 
        $(OBJDIR)/drawing.o 
        $(OBJDIR)/tag_duel.o 
        $(OBJDIR)/game.o 
        $(OBJDIR)/CGUIImageButton.o 
        $(OBJDIR)/addressbook.pb.o 
    
    RESOURCES := 
    
    SHELLTYPE := msdos
    ifeq (,$(ComSpec)$(COMSPEC))
      SHELLTYPE := posix
    endif
    ifeq (/bin,$(findstring /bin,$(SHELL)))
      SHELLTYPE := posix
    endif
    
    .PHONY: clean prebuild prelink
    
    all: $(TARGETDIR) $(OBJDIR) prebuild prelink $(TARGET)
        @:
    
    $(TARGET): $(GCH) $(OBJECTS) $(LDDEPS) $(RESOURCES)
        @echo Linking ygopro
        @echo $(LINKCMD)
        $(SILENT) $(LINKCMD)
        $(POSTBUILDCMDS)
    
    $(TARGETDIR):
        @echo Creating $(TARGETDIR)
    ifeq (posix,$(SHELLTYPE))
        $(SILENT) mkdir -p $(TARGETDIR)
    else
        $(SILENT) mkdir $(subst /,\,$(TARGETDIR))
    endif
    
    $(OBJDIR):
        @echo Creating $(OBJDIR)
    ifeq (posix,$(SHELLTYPE))
        $(SILENT) mkdir -p $(OBJDIR)
    else
        $(SILENT) mkdir $(subst /,\,$(OBJDIR))
    endif
    
    clean:
        @echo Cleaning ygopro
    ifeq (posix,$(SHELLTYPE))
        $(SILENT) rm -f  $(TARGET)
        $(SILENT) rm -rf $(OBJDIR)
    else
        $(SILENT) if exist $(subst /,\,$(TARGET)) del $(subst /,\,$(TARGET))
        $(SILENT) if exist $(subst /,\,$(OBJDIR)) rmdir /s /q $(subst /,\,$(OBJDIR))
    endif
    
    prebuild:
        $(PREBUILDCMDS)
    
    prelink:
        $(PRELINKCMDS)
    
    ifneq (,$(PCH))
    $(GCH): $(PCH)
        @echo $(notdir $<)
        -$(SILENT) cp $< $(OBJDIR)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    endif
    
    $(OBJDIR)/duelclient.o: ../gframe/duelclient.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/deck_con.o: ../gframe/deck_con.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/client_field.o: ../gframe/client_field.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/single_duel.o: ../gframe/single_duel.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/materials.o: ../gframe/materials.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/netserver.o: ../gframe/netserver.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/replay_mode.o: ../gframe/replay_mode.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/CGUITTFont.o: ../gframe/CGUITTFont.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/single_mode.o: ../gframe/single_mode.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/menu_handler.o: ../gframe/menu_handler.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/event_handler.o: ../gframe/event_handler.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/gframe.o: ../gframe/gframe.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/data_manager.o: ../gframe/data_manager.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/image_manager.o: ../gframe/image_manager.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/deck_manager.o: ../gframe/deck_manager.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/replay.o: ../gframe/replay.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/client_card.o: ../gframe/client_card.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/drawing.o: ../gframe/drawing.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/tag_duel.o: ../gframe/tag_duel.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/game.o: ../gframe/game.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/CGUIImageButton.o: ../gframe/CGUIImageButton.cpp
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    $(OBJDIR)/addressbook.pb.o: ../gframe/addressbook.pb.cc
        @echo $(notdir $<)
        $(SILENT) $(CXX) $(CXXFLAGS) -o "$@" -c "$<"
    
    -include $(OBJECTS:%.o=%.d)
  • 相关阅读:
    ArcEngine 一些实现代码(转载)
    关于GIS支持的地理数据源的命名空间
    SpringBoot-Web配置
    RedisGeo
    JedisCluster
    Java并发编程:Lock
    java并发编程:线程变量-ThreadLocal类
    java并发编程:线程池-Executors
    解决Mybatis配置ORM映射 时分秒都为0
    Kafka的存储机制以及可靠性
  • 原文地址:https://www.cnblogs.com/DancingFish/p/6093357.html
Copyright © 2020-2023  润新知