我正在关注the instructions,告诉我下载msgpack 0.5.4 for C & C++。
在Windows上,从此处下载源包并将其解压缩。打开msgpack_vc8.vcproj或msgpack_vc2008文件并使用批量生成构建它。它在lib /文件夹和include /文件夹中的头文件中构建库。
您可以使用命令行进行构建,如下所示:
vcbuild msgpack_vc2008.vcproj
dir lib % DLL files are here
dir include % header files are here
vcbuild msgpack_vc2008.vcproj已被MSBuild msgpack_vc8.vcxproj取代。我使用Visual Studio 2012将项目转换为具有正确的.vcxproj。 Visual Studio中的批量生成和运行MSBuild会产生相同的结果,因此我将从这一点开始讨论这两个问题。
项目转换后,我注意到项目设置为输出到.lib而不是.dll,所以我改变了设置以符合我的需要。编译时有一个小错误:
...\microsoft visual studio 11.0\vc\include\stdint.h(8): error C2371: 'int8_t' : redefinition; different basic types
...msgpack-0.5.4\src\msgpack\sysdep.h(23) : see declaration of 'int8_t'
所以我改变了行
typedef __int8 int8_t;
到
typedef signed __int8 int8_t;
解决了这个小问题。但后来我们到达了现在的位置。此链接器错误:
objectc.obj : error LNK2019: unresolved external symbol __imp__ntohl@4 referenced in function _msgpack_pack_array
unpack.obj : error LNK2001: unresolved external symbol __imp__ntohl@4
objectc.obj : error LNK2019: unresolved external symbol __imp__ntohs@4 referenced in function _msgpack_pack_array
unpack.obj : error LNK2001: unresolved external symbol __imp__ntohs@4
...\msgpack-0.5.4\Debug\MessagePack.dll : fatal error LNK1120: 2 unresolved externals
我搜索了这个错误的部分内容:
在sysdep.h中:
#define _msgpack_be16(x) ntohs(x)
#define _msgpack_be32(x) ntohl(x)
在object.c中:
case MSGPACK_OBJECT_ARRAY:
{
int ret = msgpack_pack_array(pk, d.via.array.size);
if(ret < 0) { return ret; }
msgpack_object* o = d.via.array.ptr;
msgpack_object* const oend = d.via.array.ptr + d.via.array.size;
for(; o != oend; ++o) {
ret = msgpack_pack_object(pk, *o);
if(ret < 0) { return ret; }
}
在unpack.c中:
static inline int template_callback_array(unpack_user* u, unsigned int n, msgpack_object* o)
{
o->type = MSGPACK_OBJECT_ARRAY;
o->via.array.size = 0;
o->via.array.ptr = (msgpack_object*)msgpack_zone_malloc(u->z, n*sizeof(msgpack_object));
if(o->via.array.ptr == NULL) { return -1; }
return 0;
}
这就是我所知道的一切。如果还有另一种方法来获取.dll,那也会有所帮助。先感谢您。 :)
答案 0 :(得分:1)
你需要链接ws2_32.lib库,因为ntohl是一个winsocket API函数。
那应该可以解决问题!