Sigar 编译笔记「建议收藏」

2022-11-01 15:37:22 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

在win7上面编译Sigar,由于开发环境及编译器版本不同,出现了许多问题。

开发环境:

win7, CMAKE 3.11.0-rc2, jdk 1.8, perl5, ant 1.10.1, vs2015

1. 编译之前要运行 %vs_root%VCvcvarsall.bat amd64,设置vs的编译依赖环境, 64位的windows一定要加上参数 amd64

2. vs2015需要根据https://github.com/hyperic/sigar/issues/111的建议修改源码,解决snprintf宏定义冲突问题

代码语言:javascript复制
diff --git a/src/os/win32/sigar_os.h b/src/os/win32/sigar_os.h
index 1499236..231f8ae 100755
--- a/src/os/win32/sigar_os.h
    b/src/os/win32/sigar_os.h
@@ -25,7  25,9 @@
 
 #ifdef MSVC
 #define WIN32_LEAN_AND_MEAN
 #if _MSC_VER < 1900
 #define snprintf _snprintf
 #endif
 #if _MSC_VER <= 1200
 #define SIGAR_USING_MSC6 /* Visual Studio version 6 */
 #define HAVE_MIB_IPADDRROW_WTYPE 0

3. vs2015需要根据https://github.com/hyperic/sigar/issues/112的建议修改源码,解决wcstok函数签名不一致问题,也可以使用 _wcstok代替原来的wcstok,以调用老版函数。

代码语言:javascript复制
--- a/bindings/java/src/jni/win32/eventlog.c	2010-04-28 17:00:00.000000000 -0400
    b/bindings/java/src/jni/win32/eventlog.c	2018-01-23 15:55:39.605908161 -0500
@@ -130,7  130,8 @@
         }
     }
 
-    ptr = wcstok(msgdll, FILESEP);
     LPWSTR ex;
     ptr = wcstok(msgdll, FILESEP, &ex);
     while (ptr) {
         HINSTANCE hlib;
 
@@ -150,7  151,7 @@
                 break;
             }
         }
-        ptr = wcstok(NULL, FILESEP);
         ptr = wcstok(NULL, FILESEP, &ex);
     }
 
     if (msgbuf) {

这样在bindings/java目录下面执行

ant clean

ant

就可以编译成功。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/206850.html原文链接:https://javaforall.cn

0 人点赞