Created
March 13, 2012 09:51
-
-
Save yinyin/2027912 to your computer and use it in GitHub Desktop.
BSD/Linux-like <endian.h> for MacOS X
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
#ifndef __FINK_ENDIANDEV_PKG_ENDIAN_H__ | |
#define __FINK_ENDIANDEV_PKG_ENDIAN_H__ 1 | |
/** compatibility header for endian.h | |
* This is a simple compatibility shim to convert | |
* BSD/Linux endian macros to the Mac OS X equivalents. | |
* It is public domain. | |
* */ | |
#ifndef __APPLE__ | |
#warning "This header file (endian.h) is MacOS X specific.\n" | |
#endif /* __APPLE__ */ | |
#include <libkern/OSByteOrder.h> | |
#define htobe16(x) OSSwapHostToBigInt16(x) | |
#define htole16(x) OSSwapHostToLittleInt16(x) | |
#define be16toh(x) OSSwapBigToHostInt16(x) | |
#define le16toh(x) OSSwapLittleToHostInt16(x) | |
#define htobe32(x) OSSwapHostToBigInt32(x) | |
#define htole32(x) OSSwapHostToLittleInt32(x) | |
#define be32toh(x) OSSwapBigToHostInt32(x) | |
#define le32toh(x) OSSwapLittleToHostInt32(x) | |
#define htobe64(x) OSSwapHostToBigInt64(x) | |
#define htole64(x) OSSwapHostToLittleInt64(x) | |
#define be64toh(x) OSSwapBigToHostInt64(x) | |
#define le64toh(x) OSSwapLittleToHostInt64(x) | |
#endif /* __FINK_ENDIANDEV_PKG_ENDIAN_H__ */ |
@SamuelMarks while mac os X does have machine/endian.h
, and does define those symbols, the linker can't find them, and I can't for the life of me figure out what library to link in for them on os x.
I take that back - somehow I confused myself - while Mac OS X does have machine/endian.h, it doesn't define be32toh()
I made this solution
sudo vi /usr/include/endian.h
ifndef FINK_ENDIANDEV_PKG_ENDIAN_H
define FINK_ENDIANDEV_PKG_ENDIAN_H 1
/** compatibility header for endian.h
- This is a simple compatibility shim to convert
- BSD/Linux endian macros to the Mac OS X equivalents.
- It is public domain.
- */
ifndef APPLE
#warning "This header file (endian.h) is MacOS X specific.\n"
endif /* APPLE */
include <libkern/OSByteOrder.h>
define htobe16(x) OSSwapHostToBigInt16(x)
define htole16(x) OSSwapHostToLittleInt16(x)
define be16toh(x) OSSwapBigToHostInt16(x)
define le16toh(x) OSSwapLittleToHostInt16(x)
define htobe32(x) OSSwapHostToBigInt32(x)
define htole32(x) OSSwapHostToLittleInt32(x)
define be32toh(x) OSSwapBigToHostInt32(x)
define le32toh(x) OSSwapLittleToHostInt32(x)
define htobe64(x) OSSwapHostToBigInt64(x)
define htole64(x) OSSwapHostToLittleInt64(x)
define be64toh(x) OSSwapBigToHostInt64(x)
define le64toh(x) OSSwapLittleToHostInt64(x)
endif /* FINK_ENDIANDEV_PKG_ENDIAN_H */
then I compiled my project, it worked pretty well (although still some warnings)
Thank you, this header file resolves my problem.
If you use http://create.stephan-brumme.com/hash-library/#keccak library in OSX,
please use this header file.
牛逼
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
From LevelDB's port_posix.h: