Created
February 23, 2011 14:21
-
-
Save frsyuki/840477 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
MessagePack for C/C++ を Visual Studio でコンパイルできないことがある問題の修正パッチの検証! | |
1. msgpack-0.5.4をダウンロードする | |
http://downloads.sourceforge.net/project/msgpack/msgpack/cpp/msgpack-0.5.4.tar.gz | |
2. インストールする | |
(msgpack_vc8.vcproj ファイルを開いてバッチビルドする) | |
3. プログラムをコンパイルしてみる | |
4. エラーが出たら、sysdep.hを差し替えてコンパイルしてみる | |
5. エラーが出なくなったら成功! 差し替えてもエラーが出たら失敗orz |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <windows.h> | |
#include <msgpack.h> | |
int main(void) { } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* MessagePack system dependencies | |
* | |
* Copyright (C) 2008-2010 FURUHASHI Sadayuki | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
#ifndef MSGPACK_SYSDEP_H__ | |
#define MSGPACK_SYSDEP_H__ | |
#include <stdlib.h> | |
#include <stddef.h> | |
#if defined(_MSC_VER) && _MSC_VER < 1600 | |
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; | |
#elif defined(_MSC_VER) // && _MSC_VER >= 1600 | |
#include <stdint.h> | |
#else | |
#include <stdint.h> | |
#include <stdbool.h> | |
#endif | |
#ifdef _WIN32 | |
typedef long _msgpack_atomic_counter_t; | |
#define _msgpack_sync_decr_and_fetch(ptr) InterlockedDecrement(ptr) | |
#define _msgpack_sync_incr_and_fetch(ptr) InterlockedIncrement(ptr) | |
#else | |
typedef unsigned int _msgpack_atomic_counter_t; | |
#define _msgpack_sync_decr_and_fetch(ptr) __sync_sub_and_fetch(ptr, 1) | |
#define _msgpack_sync_incr_and_fetch(ptr) __sync_add_and_fetch(ptr, 1) | |
#endif | |
#ifdef _WIN32 | |
#ifdef __cplusplus | |
/* numeric_limits<T>::min,max */ | |
#ifdef max | |
#undef max | |
#endif | |
#ifdef min | |
#undef min | |
#endif | |
#endif | |
#else | |
#include <arpa/inet.h> /* __BYTE_ORDER */ | |
#endif | |
#if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__) | |
#if __BYTE_ORDER == __LITTLE_ENDIAN | |
#define __LITTLE_ENDIAN__ | |
#elif __BYTE_ORDER == __BIG_ENDIAN | |
#define __BIG_ENDIAN__ | |
#elif _WIN32 | |
#define __LITTLE_ENDIAN__ | |
#endif | |
#endif | |
#ifdef __LITTLE_ENDIAN__ | |
#ifdef _WIN32 | |
# if defined(ntohs) | |
# define _msgpack_be16(x) ntohs(x) | |
# elif defined(_byteswap_ushort) || (defined(_MSC_VER) && _MSC_VER >= 1400) | |
# define _msgpack_be16(x) _byteswap_ushort(x) | |
# else | |
# define _msgpack_be16(x) \ | |
( ((((uint16_t)x) << 8) ) | \ | |
((((uint16_t)x) >> 8) ) | |
# endif | |
#else | |
# define _msgpack_be16(x) ntohs(x) | |
#endif | |
#ifdef _WIN32 | |
# if defined(ntohl) | |
# define _msgpack_be32(x) ntohl(x) | |
# elif defined(_byteswap_ulong) || (defined(_MSC_VER) && _MSC_VER >= 1400) | |
# define _msgpack_be32(x) _byteswap_ulong(x) | |
# else | |
# define _msgpack_be32(x) \ | |
( ((((uint32_t)x) << 24) ) | \ | |
((((uint32_t)x) << 8) & 0x00ff0000U ) | \ | |
((((uint32_t)x) >> 8) & 0x0000ff00U ) | \ | |
((((uint32_t)x) >> 24) ) ) | |
# endif | |
#else | |
# define _msgpack_be32(x) ntohl(x) | |
#endif | |
#if defined(_byteswap_uint64) || (defined(_MSC_VER) && _MSC_VER >= 1400) | |
# define _msgpack_be64(x) (_byteswap_uint64(x)) | |
#elif defined(bswap_64) | |
# define _msgpack_be64(x) bswap_64(x) | |
#elif defined(__DARWIN_OSSwapInt64) | |
# define _msgpack_be64(x) __DARWIN_OSSwapInt64(x) | |
#else | |
#define _msgpack_be64(x) \ | |
( ((((uint64_t)x) << 56) ) | \ | |
((((uint64_t)x) << 40) & 0x00ff000000000000ULL ) | \ | |
((((uint64_t)x) << 24) & 0x0000ff0000000000ULL ) | \ | |
((((uint64_t)x) << 8) & 0x000000ff00000000ULL ) | \ | |
((((uint64_t)x) >> 8) & 0x00000000ff000000ULL ) | \ | |
((((uint64_t)x) >> 24) & 0x0000000000ff0000ULL ) | \ | |
((((uint64_t)x) >> 40) & 0x000000000000ff00ULL ) | \ | |
((((uint64_t)x) >> 56) ) ) | |
#endif | |
#else | |
#define _msgpack_be16(x) (x) | |
#define _msgpack_be32(x) (x) | |
#define _msgpack_be64(x) (x) | |
#endif | |
#define _msgpack_store16(to, num) \ | |
do { uint16_t val = _msgpack_be16(num); memcpy(to, &val, 2); } while(0); | |
#define _msgpack_store32(to, num) \ | |
do { uint32_t val = _msgpack_be32(num); memcpy(to, &val, 4); } while(0); | |
#define _msgpack_store64(to, num) \ | |
do { uint64_t val = _msgpack_be64(num); memcpy(to, &val, 8); } while(0); | |
#define _msgpack_load16(cast, from) ((cast)_msgpack_be16(*(uint16_t*)from)) | |
#define _msgpack_load32(cast, from) ((cast)_msgpack_be32(*(uint32_t*)from)) | |
#define _msgpack_load64(cast, from) ((cast)_msgpack_be64(*(uint64_t*)from)) | |
#endif /* msgpack/sysdep.h */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment