{"id":19384944,"url":"https://github.com/huskar-t/tdengine-go-windows","last_synced_at":"2026-04-12T02:32:13.544Z","repository":{"id":44020567,"uuid":"230711567","full_name":"huskar-t/tdengine-go-windows","owner":"huskar-t","description":"tdengine liburary of go in windows","archived":false,"fork":false,"pushed_at":"2022-12-10T13:26:26.000Z","size":2971,"stargazers_count":0,"open_issues_count":11,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-24T17:28:18.050Z","etag":null,"topics":["bigdata","cgo","database","go","golang","iot","taos","tdengine","time-series","windows"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/huskar-t.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-12-29T06:19:35.000Z","updated_at":"2022-12-16T03:00:06.000Z","dependencies_parsed_at":"2023-01-26T07:31:18.823Z","dependency_job_id":null,"html_url":"https://github.com/huskar-t/tdengine-go-windows","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/huskar-t/tdengine-go-windows","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huskar-t%2Ftdengine-go-windows","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huskar-t%2Ftdengine-go-windows/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huskar-t%2Ftdengine-go-windows/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huskar-t%2Ftdengine-go-windows/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/huskar-t","download_url":"https://codeload.github.com/huskar-t/tdengine-go-windows/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/huskar-t%2Ftdengine-go-windows/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260314858,"owners_count":22990652,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bigdata","cgo","database","go","golang","iot","taos","tdengine","time-series","windows"],"created_at":"2024-11-10T09:33:08.783Z","updated_at":"2026-04-12T02:32:13.494Z","avatar_url":"https://github.com/huskar-t.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"已提交pr此仓库作废\n\n[TDengine 官方地址：https://www.taosdata.com](https://www.taosdata.com)\n\n## 基于TDengine-ver-1.6.4.4在windows 10下cmake+msys2编译(windows cgo 使用)\n## cgo 使用\n**release页面下载编译好的库**   \n我们只需要关注 **libtaos.dll** 和 **libtaos.dll.a**  \ngo 文件使用：\n~~~go\n/*\n#cgo CFLAGS : -I(taos.h文件文件夹)\n#cgo LDFLAGS: (libtaos.dll.a文件位置)\n*/\n~~~\n例如：\n~~~go\n/*\n#cgo CFLAGS : -IE:/software/msys64/usr/local/include\n#cgo LDFLAGS: E:/software/msys64/usr/local/lib/libtaos.dll.a\n#include \u003cstdio.h\u003e\n#include \u003cstdlib.h\u003e\n#include \u003cstring.h\u003e\n#include \u003ctaos.h\u003e\n*/\nimport \"C\"\n~~~\n\n## 运行时\n程序运行时将 **libtaos.dll** 放到程序同级目录，需要保证服务端版本也是1.6.4.4。若版本不同请使用官方动态库改名使用(见注)。  \n**注：** 由于使用纯c编写使用vc编译器编译的动态库可以由 gcc 调用，所以官方提供的 **taos.dll** 可以改名为 **libtaos.dll** 使用。\n\n## 背景\nTDengine 提供的 go 连接器使用的是 cgo 且只能在 liunx 系统下使用，windows上的动态库是由vc编译器编译而成，cgo 无法使用，本文提供 windows 下用 gcc 编译器编译 TDengine 的步骤和本人编译后的成品。  \n**重中之重！交叉编译后的动态库并不保证质量！生产环境 慎用！慎用！慎用！生产环境使用官方提供的 **taos.dll** 改名为 **libtaos.dll** 使用**\n\n## 安装部署 msys2\n### 安装\n[https://mirror.tuna.tsinghua.edu.cn/help/msys2/](https://mirror.tuna.tsinghua.edu.cn/help/msys2/)\n安装完后打开 c:\\msys64\\msys2_shell.cmd 在窗口上右击， 选择 Options ，更改字符集 zh_cn gbk  \n修改 pacman 配置见上面网页 （有梯子可以省略这步）\n修改后执行\n\n```bash\npacman -S make\npacman -S mingw-w64-x86_64-gcc\n ```\n### 配置环境变量\n**C:\\msys64\\mingw64\\bin\nC:\\msys64\\usr\\bin**\n按以上顺序添加到系统变量 path\n## 安装cmake:\n [https://cmake.org/download/](https://cmake.org/download/)\n 默认安装\n## 下载 TDengine\n [https://github.com/taosdata/TDengine/archive/ver-1.6.4.4.zip](https://github.com/taosdata/TDengine/archive/ver-1.6.4.4.zip)\n \n## 修改说明\n### CMakeLists.txt \n注释或删除以下行:\n~~~ bash\n    SET(COMMON_FLAGS \"/nologo /WX- /Oi /Oy- /Gm- /EHsc /MT /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Gd /errorReport:prompt /analyze-\")\n    SET(DEBUG_FLAGS \"/Zi /W3 /GL\")\n    SET(RELEASE_FLAGS \"/W0 /GL\")\n~~~\n### src/client/CMakeLists.txt \n注释或删除以下行:\n~~~ bash\nSET_TARGET_PROPERTIES(taos PROPERTIES LINK_FLAGS /DEF:${TD_COMMUNITY_DIR}/src/client/src/taos.def)\n~~~\n\n### deps/iconv/iconv.c \n修改以下行\n~~~c\nconst struct alias *\naliases2_lookup (register const char *str)\n{\n  const struct alias * ptr;\n  unsigned int count;\n  for (ptr = sysdep_aliases, count = sizeof(sysdep_aliases)/sizeof(sysdep_aliases[0]); count \u003e 0; ptr++, count--)\n    if (!strcmp(str, stringpool2 + ptr-\u003ename))\n      return ptr;\n  return NULL;\n}\n~~~\n改为\n~~~c\n// gcc -o0 bug fix \n// see http://git.savannah.gnu.org/gitweb/?p=libiconv.git;a=blobdiff;f=lib/iconv.c;h=31853a7f1c47871221189dbf597473a16d8a8da7;hp=5a1a32597fa3efc5f69624d37a2eb96f308cd241;hb=b29089d8b43abc8fba073da7e6dccaeba56b2b70;hpb=0a04404c90d6a725b8b6bbcd65e10c5fcf5993e9\n\nstatic const struct alias *\naliases2_lookup (register const char *str)\n{\n  const struct alias * ptr;\n  unsigned int count;\n  for (ptr = sysdep_aliases, count = sizeof(sysdep_aliases)/sizeof(sysdep_aliases[0]); count \u003e 0; ptr++, count--)\n    if (!strcmp(str, stringpool2 + ptr-\u003ename))\n      return ptr;\n  return NULL;\n}\n~~~\n\n### /os/windows/inc/os.h\n添加头文件\n~~~c\n#include \u003cWS2tcpip.h\u003e\n#include \u003cwinbase.h\u003e\n~~~\n修改1:\n~~~c\n// #define str2int64 _atoi64\nint64_t str2int64(char *str);\n~~~\n修改2:\n~~~c\n// #define atomic_val_compare_exchange_8(ptr, oldval, newval) _InterlockedCompareExchange8((char volatile*)(ptr), (char)(newval), (char)(oldval))\n#define atomic_val_compare_exchange_8 __sync_val_compare_and_swap\n~~~\n修改3:\n~~~c\n// #define atomic_fetch_add_8(ptr, val) _InterlockedExchangeAdd8((char volatile*)(ptr), (char)(val))\n// #define atomic_fetch_add_16(ptr, val) _InterlockedExchangeAdd16((short volatile*)(ptr), (short)(val))\n#define atomic_fetch_add_8 __sync_fetch_and_ad\n#define atomic_fetch_add_16 __sync_fetch_and_add\n~~~\n修改4:\n~~~c\n// char interlocked_and_fetch_8(char volatile* ptr, char val);\n// short interlocked_and_fetch_16(short volatile* ptr, short val);\nlong interlocked_and_fetch_32(long volatile* ptr, long val);\n__int64 interlocked_and_fetch_64(__int64 volatile* ptr, __int64 val);\n\n// #define atomic_and_fetch_8(ptr, val) interlocked_and_fetch_8((char volatile*)(ptr), (char)(val))\n// #define atomic_and_fetch_16(ptr, val) interlocked_and_fetch_16((short volatile*)(ptr), (short)(val))\n#define atomic_and_fetch_32(ptr, val) interlocked_and_fetch_32((long volatile*)(ptr), (long)(val))\n#define atomic_and_fetch_64(ptr, val) interlocked_and_fetch_64((__int64 volatile*)(ptr), (__int64)(val))\n\n~~~\n修改5:\n~~~c\n// #define atomic_fetch_and_8(ptr, val) _InterlockedAnd8((char volatile*)(ptr), (char)(val))\n// #define atomic_fetch_and_16(ptr, val) _InterlockedAnd16((short volatile*)(ptr), (short)(val))\n#define atomic_fetch_and_32(ptr, val) _InterlockedAnd((long volatile*)(ptr), (long)(val))\n\n~~~\n修改6:\n~~~c\n// char interlocked_or_fetch_8(char volatile* ptr, char val);\n// short interlocked_or_fetch_16(short volatile* ptr, short val);\nlong interlocked_or_fetch_32(long volatile* ptr, long val);\n__int64 interlocked_or_fetch_64(__int64 volatile* ptr, __int64 val);\n\n// #define atomic_or_fetch_8(ptr, val) interlocked_or_fetch_8((char volatile*)(ptr), (char)(val))\n// #define atomic_or_fetch_16(ptr, val) interlocked_or_fetch_16((short volatile*)(ptr), (short)(val))\n#define atomic_or_fetch_32(ptr, val) interlocked_or_fetch_32((long volatile*)(ptr), (long)(val))\n#define atomic_or_fetch_64(ptr, val) interlocked_or_fetch_64((__int64 volatile*)(ptr), (__int64)(val))\n\n~~~\n修改7:\n~~~c\n// #define atomic_fetch_or_8(ptr, val) _InterlockedOr8((char volatile*)(ptr), (char)(val))\n// #define atomic_fetch_or_16(ptr, val) _InterlockedOr16((short volatile*)(ptr), (short)(val))\n#define atomic_fetch_or_32(ptr, val) _InterlockedOr((long volatile*)(ptr), (long)(val))\n\n\n~~~\n修改8:\n~~~c\n// char interlocked_xor_fetch_8(char volatile* ptr, char val);\n// short interlocked_xor_fetch_16(short volatile* ptr, short val);\nlong interlocked_xor_fetch_32(long volatile* ptr, long val);\n__int64 interlocked_xor_fetch_64(__int64 volatile* ptr, __int64 val);\n\n// #define atomic_xor_fetch_8(ptr, val) interlocked_xor_fetch_8((char volatile*)(ptr), (char)(val))\n// #define atomic_xor_fetch_16(ptr, val) interlocked_xor_fetch_16((short volatile*)(ptr), (short)(val))\n#define atomic_xor_fetch_32(ptr, val) interlocked_xor_fetch_32((long volatile*)(ptr), (long)(val))\n#define atomic_xor_fetch_64(ptr, val) interlocked_xor_fetch_64((__int64 volatile*)(ptr), (__int64)(val))\n\n~~~\n修改9:\n~~~c\n// #define atomic_fetch_xor_8(ptr, val) _InterlockedXor8((char volatile*)(ptr), (char)(val))\n// #define atomic_fetch_xor_16(ptr, val) _InterlockedXor16((short volatile*)(ptr), (short)(val))\n#define atomic_fetch_xor_32(ptr, val) _InterlockedXor((long volatile*)(ptr), (long)(val))\n~~~\n修改10:\n~~~c\n// #define MILLISECOND_PER_SECOND (1000i64)\n#define MILLISECOND_PER_SECOND (1000LL)\n~~~\n\n### src/os/windows/src/twindows.c\n\n添加头:\n~~~c\n#include \u003cintrin.h\u003e\n#include \u003cwinbase.h\u003e\n#include \u003cWinsock2.h\u003e\n~~~\n\n修改1:\n~~~c\n// add\n// char interlocked_add_fetch_8(char volatile* ptr, char val) {\n//   return _InterlockedExchangeAdd8(ptr, val) + val;\n// }\n\n// short interlocked_add_fetch_16(short volatile* ptr, short val) {\n//   return _InterlockedExchangeAdd16(ptr, val) + val;\n// }\n\nchar interlocked_add_fetch_8(char volatile* ptr, char val) {\n  return __sync_fetch_and_add(ptr, val) + val;\n}\n\nshort interlocked_add_fetch_16(short volatile* ptr, short val) {\n  return __sync_fetch_and_add(ptr, val) + val;\n}\n~~~\n修改2:\n~~~c\n// and\n// char interlocked_and_fetch_8(char volatile* ptr, char val) {\n//   return _InterlockedAnd8(ptr, val) \u0026 val;\n// }\n\n// short interlocked_and_fetch_16(short volatile* ptr, short val) {\n//   return _InterlockedAnd16(ptr, val) \u0026 val;\n// }\n~~~\n修改3:\n~~~c\n// or\n// char interlocked_or_fetch_8(char volatile* ptr, char val) {\n//   return _InterlockedOr8(ptr, val) | val;\n// }\n\n// short interlocked_or_fetch_16(short volatile* ptr, short val) {\n//   return _InterlockedOr16(ptr, val) | val;\n// }\n~~~\n修改4:\n~~~c\n// xor\n// char interlocked_xor_fetch_8(char volatile* ptr, char val) {\n//   return _InterlockedXor8(ptr, val) ^ val;\n// }\n\n// short interlocked_xor_fetch_16(short volatile* ptr, short val) {\n//   return _InterlockedXor16(ptr, val) ^ val;\n// }\n~~~\n修改5:\n添加以下代码\n~~~c\nint64_t str2int64(char *str) {\n  char *endptr = NULL;\n  return strtoll(str, \u0026endptr, 10);\n}\n\nuint64_t htonll(uint64_t val)\n{\n    return (((uint64_t) htonl(val)) \u003c\u003c 32) + htonl(val \u003e\u003e 32);\n}\n~~~\n\n### src/inc/taos.h\n将要导出的函数添加\n~~~c\n__declspec(dllexport)\n~~~\n例如：\n~~~c\n__declspec(dllexport) void  taos_init();\n~~~\n需要导出的函数见 src/client/src/taos.def\n## cmake 转换\nConfigure 选择 **MSYSMakefiles**\n\nGenerator\n## make\n进到转换后的目录执行 make\n成功之后在编译目录的 **build/bin** 文件夹可以看到生成 **taos.exe**  \n**build/lib** 下存在以下文件\n\n - libiconv.a\n - libos.a\n - libpthread.a\n - libregex.a\n - libtaos.dll\n - libtaos.dll.a\n - libtals_static.a\n - libtrpc.a\n - libutil.a\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuskar-t%2Ftdengine-go-windows","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhuskar-t%2Ftdengine-go-windows","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhuskar-t%2Ftdengine-go-windows/lists"}