message pack 사용

2375 단어 쓰다
저 는 message pack 을 사용 하여 통신 대상 을 직렬 화하 고 사용 하 는 방식 으로 이 글 을 참고 할 계획 입 니 다.
http://www.cppfans.org/1410.html
여기에 자신 이 직면 한 몇 가지 문 제 를 기록 하 세 요.
먼저 VS 2010 에서 message pack 을 컴 파일 하여 정적 라 이브 러 리 를 만 듭 니 다. 이것 은 문제 가 없습니다. 테스트 항목 을 새로 만 들 고 message pack 을 테스트 합 니 다. 컴 파일 에 문제 가 없습니다. 연결 할 때 다음 문제 가 발생 합 니 다.
오류 1 error LNK 2019: 해석 할 수 없 는 외부 기호imp__ntohl@4, 이 기 호 는 함수 "private: static void cdecl msgpack:: packer < class msgpack:: sbuffer >: pack raw (class msgpack:: sbuffer &, unsigned int)" (? pack raw @? $packer@Vsbuffer@msgpack@@@msgpack@@CAXAAVsbuffer@2@I@Z) 에서 인용 D: \ \ procjectkuku\program\library\msgpack-0.5.4\test_msgpack\enter.obj test_msgpack
여기 서 ntohl 이라는 함 수 는 함수 가 실현 되 지 않 았 고 이 함 수 는 SOCKET 함수 입 니 다. MSDN 을 찾 아 보 세 요. ws2 가 필요 합 니 다.32. lib 이 정적 라 이브 러 리 는 cpp 파일 에 이 라 이브 러 리 에 대한 인용 을 추가 하거나 프로젝트 속성의 라 이브 러 리 의존 항목 에 w2 를 추가 합 니 다.32. lib, 이번 연결 은 문제 없어 요.
 
프로젝트 에 사 용 된 VS 2013 Desktop 버 전 입 니 다. 이 버 전에 서 message pack 을 사용 할 때 다음 과 같은 문제 가 발생 합 니 다.
오류 1 error C2371: "int8 t": 다시 정의 합 니 다.다른 기본 형식 c: \ \ program files \ microsoft visual studio 12.0 \ vc \ include \ stdint. h 8 1 testmsgpack
출력 표시 좀 볼 게 요.
1 > c: \ \ program files \ \ microsoft visual studio 12.0 \ vc \ \ include \ \ stdint. h (8): error C2371: "int8 t": 재 정의;다른 기본 형식 1 > d: \ procjectkuku \ program \ library \ msgpack - 0.5.4 \ src \ \ msgpack \ \ sysdep. h (23): "int8 t" 의 성명 참조
하 나 는 stdint. h 에서 정 의 된 것 이 고, 다른 하 나 는 msgpack \ sysdep. h 에서 정 의 된 것 입 니 다. 앞 에 하 나 는 시스템 파일 이 고, 뒤에 하 나 는 라 이브 러 리 에 있 는 성명 파일 입 니 다. 뒤에 있 는 파일 을 열 어 보 세 요.
#ifdef _MSC_VER
typedef __int8 int8_t;
typedef unsigned __int8 uint8_t;
typedef __int16 int16_t;
typedef unsigned __int16 uint16_t;
typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
#else
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#endif

사실은MSC_VER 버 전 으로 인 한 문제 입 니 다. 이 럴 때 \ # ifdef 를 \ # ifndef 로 바 꾸 면 됩 니 다.

좋은 웹페이지 즐겨찾기