我正在尝试在Windows 7中安装缺少的Perl模块(Palm::PDB)。
我尝试了以下内容:
使用Perl Package Manager:遗憾的是它似乎找不到我想要的模块。
使用命令提示符在Windows中启动CPAN shell:不幸的是,它显示以下错误。我已经安装了MinGW并且还设置了路径。
D:\Scripts>perl -MCPAN -e 'shell' install Palm::PDB
It looks like you don't have a C compiler and make utility installed. Trying
to install dmake and the MinGW gcc compiler using the Perl Package Manager.
This may take a few minutes...
ppm.bat install failed: Can't find any package that provides MinGW
It looks like the installation of dmake and MinGW has failed. You will not be
able to run Makefile commands or compile C extension code. Please check your
internet connection and your proxy settings!
有没有其他简单的方法在Windows上安装Perl模块?
答案 0 :(得分:4)
您的ActiveState Perl安装有问题,因为它会自动为您安装dmake和MinGW。
如果安装了dmake.exe,请尝试通过运行以下命令安装MinGW:
ppm install MinGW
perl Makefile.PL
dmake
dmake test
dmake install
MinGW和dmake也被安装到C:\ Perl \ site \ bin中。确保此目录位于PATH上(默认情况下由ActivePerl安装程序完成)。
答案 1 :(得分:3)
在Windows上使用Perl的一种简单方法是使用最新版本的StrawberryPerl。它捆绑了dmake
和C编译器(gcc)。 cpan
命令只是开箱即用。
答案 2 :(得分:1)
cpan尝试找到一个C编译器 - 可能这个模块或某些依赖项具有本机代码(对于数据库驱动程序更为常见)。 MingW是Windows的gcc端口。
如果不起作用,请尝试使用linux安装虚拟机并安装gcc:)
答案 3 :(得分:1)
ActiveState会审核他们为PPM发布的所有模块。因此,它通常没有不需要的模块,或者最近发布的模块。
在Windows上使用它的最快方法是安装Strawberry Perl因为开箱即用,它附带了一个可以与CPAN一起使用的C编译器。这将使您免于配置MingW的所有麻烦。
答案 4 :(得分:1)
对我来说,它从此位置C:\ Users \%YOUR_USERNAME%\ AppData \ Local \ ActiveState \ ActivePerl \
C:\WINDOWS\system32>ppm install MinGW
下载ActiveState软件包系统信息库dbimage ...完成 下载MinGW-4.6.3 ...完成 正在下载dmake-4.11.20080107 ...完成 打开MinGW-4.6.3的包装...完成 开箱dmake-4.11.20080107 ...完成 为MinGW-4.6.3生成HTML ...完成 为dmake-4.11.20080107生成HTML ...完成 正在更新站点区域中的文件...已完成 已安装3697个文件
谢谢@Void
答案 5 :(得分:0)
perl -MCPAN -e shell
安装SOAP :: Lite
如果有人在Windows 10上遇到同样的问题,请在Windows命令行上使用上述命令。它对我有用。
答案 6 :(得分:0)
我解决了,我清理了ActivePerl的AppData文件夹。
C:\用户\%YOUR_USERNAME%\应用程序数据\本地\的ActiveState \的ActivePerl \
删除该文件夹中的所有数据。然后再次重新运行import { Component,ElementRef, OnInit } from '@angular/core';
import { Http, Headers, RequestOptions } from '@angular/http';
import 'rxjs/add/operator/map';
import "rxjs/add/operator/do";
export class HomeComponent implements OnInit {
constructor(private http: Http,private el: ElementRef) {
}
upload() {
let inputEl: HTMLInputElement = this.el.nativeElement.querySelector('#photo');
let fileCount: number = inputEl.files.length;
let formData = new FormData();
if (fileCount > 0) { // a file was selected
for (let i = 0; i < fileCount; i++) {
formData.append('file', inputEl.files.item(i));
}
let headers = new Headers();
headers.append('Accept', 'application/json');
const token = localStorage.getItem('token') ? '?token=' + localStorage.getItem('token') : '';
this.http.post('http://localhost:3000/stretch/1' + token, formData, { headers: headers }).map(res => res.json())
.catch(error => Observable.throw(error))
.subscribe(
data => console.log(data),
error => console.log(error)
);
}
}
}
// html code
<input id="photo" type="file" />
<button type="button" class="btn btn-success btn-s" (click)="upload()">Upload</button>
my node code
var multer = require('multer'); //FOR FILE UPLOAD
var storage = multer.diskStorage({ //multers disk storage settings
destination: function (req, file, cb) {
cb(null, './public/uploads'); //image storage path
},
filename: function (req, file, cb) {
var datetimestamp = Date.now();
cb(null, file.originalname);
}
});
var upload = multer({ //multer settings
storage: storage
}).single('file');
router.post('/1', upload, function (req, res, next) {
var decoded = jwt.decode(req.query.token);
var path = '';
User.findById(decoded.user._id, function (err, user) {
if (err) {
return res.status(500).json({
title: 'An error occurred',
error: err,
});
}
if (req.file){
upload(req, res, function (err) {
if (err) {
// An error occurred when uploading
return res.status(422).send("an Error occured");
}
// No error occured.
path = req.file.path;
return res.status(200).send(path);
});
}
});
});
!它奏效了。