0

anybony 在 Visual Studio 2010 上成功编译了 Maxmind C 库吗?我无法在 Windows 上编译它,因为我收到很多关于未找到的文件的错误,例如 unistd.h

4

1 回答 1

4

您看到的错误可能是因为您包含了并非真正需要的 GeoIPUpdate。GeoIPUpdate 是用于更新数据库的独立脚本,不需要使用 API 本身。尝试删除它以查看是否可以解决您的问题。

此外,为了在 Visual Studio 2005 上为我编译 1.4.8 版,我必须执行以下附加步骤:

  1. 在 GeoIPCity.c 中,将 GeoIP*.h 文件的包含更改为使用 "" 而不是 <>
  2. 在 GeoIPCity.h 中,将 GeoIP.h 的包含更改为使用 "" 而不是 <>
  3. 在 GeoIP.h 中添加#define ssize_t long
  4. 在 GeoIP.c 中更改PACKAGE_VERSION为“1.4.8”
  5. static const在 GeoIPCity.c 中,声明数组时不能使用 a 。改变tmp_fixed_recordto 的定义unsigned char tmp_fixed_record[6+4]; //Can't use CITYCONFIDENCEDIST_FIXED_RECORD in declaration
  6. 在 GeoIPCity.ct的开头声明_extract_record()
  7. 将 main 函数添加到 GeoIPCity.c 以编译您的代码。
  8. 从http://www.winimage.com/zLibDll/index.html下载 zlib125.dll.zip 文件。提取这些文件并将 dllx64/* 和 static64/zlibstat.lib 文件保存到磁盘上的某个位置。现在,在 Visual Studio 中转到 Project->Properties->Linker->Input 并在“Additional Dependencies”下添加“ws2_32.lib zlibwapi.lib zlibstat.lib”。接下来,在 Linker->General 下,转到“Additional Library Dependencies”并添加上面保存文件的位置。
  9. 在 GeoIPCity.c 和 GeoIP.cpread中未定义。将以下定义添加到每个文件中:

#define pread my_pread
static size_t my_pread( int file_no, void *buffer, size_t size, size_t offset )
{
  if (_lseek( file_no, (long)offset, SEEK_SET) == offset)
    return _read(file_no, buffer, (int)size);
  else
    return -1L;
}
此外,添加#include <io.h>到 GeoIP.h 以便包含_lseek_read

于 2012-11-22T10:30:09.230 回答