Linux에서 테스트한 작은 응용 프로그램이 있는데 잘 작동합니다. 이제 FreeBSD에서 동일한 코드를 작성하고 싶습니다. FreeBSD에서 빌드하려면 Makefile을 약간 변경해야 합니다. 이것은 내 수정된 버전입니다.
CXX := gcc
LDFLAGS += -L/usr/local/lib -R/usr/local/lib -L/usr/lib -R/usr/lib -L/usr/local/include -R/usr/local/include -L/usr/include -R/usr/include
CXXFLAGS += -pedantic -Wall -Wextra -std=c++17
LIBS += -lprotobuf -lstdc++
INCL += -I/usr/local/include
SRCS := my_app.cpp \
file1.pb.cc \
file2.pb.cc
OBJS := $(SRCS:% = %.o)
target := my_app
all:
$(CXX) $(OBJS) -o $(target) $(LIBS) $(INCL) $(LDFLAGS)
%.o:%.cpp
$(CXX) $(CXXFLAGS) $(INCL) $(LDFLAGS) -c $^ -o $@
clean:
rm -rf *o $(target)
문제는 링커 오류가 많이 발생한다는 것입니다. 이 모든 것은 Google protobuf 기능과 관련이 있습니다. 아래에 그 중 하나를 포함시켰습니다:
/usr/local/bin/ld: /tmp//ccpo2Qek.o: in function `main':
my_app.cpp:(.text+0x3a4): undefined reference to `google::protobuf::MessageLite::SerializeAsString[abi:cxx11]() const'
애플리케이션을 빌드하려면 gmake를 사용합니다. .NET을 사용하여 FreeBSD 시스템에 protobuf를 설치했습니다 pkg install
. 일부 Google protobuf .h 파일 /usr/local/include
과 일부 protobuf .so 라이브러리를 에서 찾을 수 있습니다 /usr/local/lib
. 이 위치를 추가하려고 시도했지만 LDFLAGS
여전히 작동하지 않습니다.
도움을 주셔서 미리 감사드립니다.
답변1
gcc를 C++로 교체했는데 이제 작동합니다.