NSPR在Windows上编译及使用

工作上需要做windows和linux的C++跨平台,虽说C++在两个系统下是完美支持的但之间还是有点区别,特别是如果要使用到系统资源的时候更是,这时那就不可避免的开始一大堆宏定义,这个我肯定写不好而且浪费时间!于是想找一个平台抽象库,屏蔽两个操作系统之间的差异,当然只是包含最基本的如文件、内存、线程、网络等等。最开始的时候也考虑到用boost、qt之类的但考虑到有点大而且公司不一定愿意添加这个进去,多半会增加完全不必要的工作量,然后也搜索到其他一些简单的跨平台库,但都很专一仅仅是涉及到一个方面,也不能保证稳定性。所以最终朋友介绍NSPR给我!

Netscape Portable Runtime (NSPR)  提供一套面向系统级的与平台无关的 API  和类似于libc的函数. 这些API被用在Mozilla客户端, Red Hat公司、Sun公司的服务应用程序以及其他公司的一些软件中。

编译

On Windows, the NSPR build system needs GNU make and a Unix command-line utility suite such as MKS Toolkit, Cygwin, and MSYS. The easiest way to get these tools is to install the MozillaBuild package.在windows上编译NSPR需要GNU和Unix环境套件如MKS、Cygwin、MSYS。不过最好的方式是下载MozillaBuild开发包(下载地址,详细的开发包说明点这里:)。

NSPR工程下载地址:https://ftp.mozilla.org/pub/mozilla.org/nspr/,包含说明文档和源码。

1、解压NSPR到某目录(建议根目录下),安装MozillaBuild开发包;

2、打开MozillaBuild开发包安装目录,发现里面有很多start-msvcXX.bat(XX代表VS编译器的版本号,注意VS是32 or 64位!),然后用cd切换到NSPR的解压目录;

3、新建一个目录用来编译、链接,具体方式可参考官方的指导

 # check out the source tree from CVS
 cvs -q -d :pserver:anonymous@cvs-mirror.mozilla.org:/cvsroot co -r NSPR_4_8_RTM mozilla/nsprpub
 # create a build directory
 mkdir target.debug
 cd target.debug
 # run the configure script
 ../mozilla/nsprpub/configure [optional configure options]
 # build the libraries
 gmake
 # build the test programs
 cd pr/tests
 gmake
说明:#号后是注释,cvs这条指令是下载(由于已经下载可以跳过),其他的应该能看懂吧?下面说说configure几个重要选项
1、--disable-debug --enable-optimize:Specify these two options to generate an optimized (release) build.These two options can actually be used independently, but it's not recommended. configure默认是生成debug的,如果需要release则需要加上这两个选项。
2、更多的选项说明看这里: https://developer.mozilla.org/en-US/docs/NSPR_build_instructions
3、需要说明的是,上述链接里提到的32、64位环境是指vs是32 or 64,不是指windows操作系统是多少位。

使用

1、在上面提到“新建一个目录用来编译、链接”,等链接完成之后会发现目录下多了一个“disk”的新目录,下面又包含bin、include、lib三个子目录,这就是开发和运行所需要的文件。在lib目录下_s结尾的是静态lib。
2、使用时,先包含头文件和.lib,运行时拷贝dll。(我目前还不知道这三个dll的关系:(,后面我搞清楚了会写在博客里的 )。

补充

我在使用MozillaBuild开发包之前,尝试使用过mingw、cygmin,最终都失败了!当然现在明白了mingw、msys的联系,参见 这里


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
NSPR(Netscape Portable Runtime)是一套跨平台的系统级函数库,与操作系统无关,可以在多个操作系统上运行。因此可以使用NSPR来实现维纳滤波。 维纳滤波是一种最优滤波方法,可以通过对原始信号和噪声的统计特性进行分析,从而得到最优滤波器的频率响应。 以下是一个使用NSPR实现维纳滤波的示例代码: ``` #include <stdio.h> #include <stdlib.h> #include <nspr/nspr.h> #define N 1000 #define M 100 double x[N], y[N], h[M], v[M], mu, sig; void init() { int i, j; PRUint32 seed = (PRUint32)PR_Now(); for (i = 0; i < N; i++) { x[i] = (double)PR_Random(&seed) / PR_UINT32_MAX; y[i] = 0.0; } for (i = 0; i < M; i++) { h[i] = (double)PR_Random(&seed) / PR_UINT32_MAX; v[i] = 0.0; } mu = 0.0; for (i = 0; i < N; i++) { mu += x[i]; } mu /= N; sig = 0.0; for (i = 0; i < N; i++) { sig += (x[i] - mu) * (x[i] - mu); } sig /= N; } void filter() { int i, j; for (i = 0; i < M; i++) { v[i] = h[M - i - 1]; } for (i = M; i < N; i++) { y[i] = 0.0; for (j = 0; j < M; j++) { y[i] += h[j] * x[i - j]; } } for (i = 0; i < M; i++) { h[i] = 0.0; for (j = 0; j < N - i; j++) { h[i] += x[j] * y[j + i]; } h[i] /= (N - i); h[i] -= mu * v[i] / sig; } } int main(int argc, char* argv[]) { init(); filter(); return 0; } ``` 在这个示例代码中,我们首先使用NSPR生成了一个长度为1000的随机信号x,长度为100的随机滤波器h,并计算了x的均值mu和方差sig。然后使用滤波器h对信号x进行滤波,得到输出信号y,并根据y和x的自相关函数计算出最优滤波器h。最后输出最优滤波器h的值。 需要注意的是,在实际应用中,信号和滤波器的长度可能会非常大,因此在计算时需要使用高效的算法和数据结构来优化计算速度和内存占用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值