windows - 如何在 Windows 上安装primer3?
问题描述
问题:
我需要安装Primer3,这是一种广泛使用的生物工具,可以让人们设计引物。
尝试解决:
我试图按照他们的说明安装 Windows无济于事,因为它似乎没有提供足够的信息。无论如何,我都不是经验丰富的程序员。到目前为止,我还参考了这个关于类似问题的堆栈溢出帖子,并尝试遵循建议的答案。我还简要地查看了他们 github 存储库中的一个线程,尽管我无法真正理解他们在其中说什么。就我从命令终端(mingw32 版本)获得的输出而言,似乎没有任何效果:
C:\Users\mqian\Desktop\CGIProject\primer3-2.4.0\primer3-2.4.0\test>mingw32-make
TESTOPTS=--windows
cd ..\src & mingw32-make
mingw32-make[1]: Entering directory 'C:/Users/mqian/Desktop/CGIProject/primer3-2
.4.0/primer3-2.4.0/src'
g++ -c -g -Wall -D__USE_FIXED_PROTOTYPES__ -O2 masker.c
masker.c:8:22: fatal error: sys/mman.h: No such file or directory
compilation terminated.
Makefile:226: recipe for target 'masker.o' failed
mingw32-make[1]: *** [masker.o] Error 1
mingw32-make[1]: Leaving directory 'C:/Users/mqian/Desktop/CGIProject/primer3-2.
4.0/primer3-2.4.0/src'
Makefile:94: recipe for target 'makeexes' failed
mingw32-make: *** [makeexes] Error 2
如果我只是尝试在 src 文件夹中运行 make:
C:\Users\mqian\Desktop\CGIProject\primer3-2.4.0\primer3-2.4.0\src>mingw32-make
g++ -c -g -Wall -D__USE_FIXED_PROTOTYPES__ -O2 masker.c
masker.c:8:22: fatal error: sys/mman.h: No such file or directory
compilation terminated.
Makefile:226: recipe for target 'masker.o' failed
mingw32-make: *** [masker.o] Error 1
就所需的软件或软件包而言,这是我缺少的东西吗?他们的makefile被窃听了吗?任何帮助,将不胜感激。
PS 这里是他们在 sourceforge 上的下载站点的链接。我使用的是 2.4.0 版。
解决方案
我能够在 Windows 上这样构建它(替换/usr/local
为您要安装的路径):
在 MSYS2 下从https://github.com/witwall/mman-win32/releases构建 mman-win32,使用:
./configure --prefix=/usr/local --cc=gcc --enable-static --enable-shared &&
make &&
mkdir -p /usr/local/include/mman-win32/sys /usr/local/lib &&
cp -f *.h /usr/local/include/mman-win32/sys/ &&
cp -f *.a /usr/local/lib/ &&
echo Success
然后从https://github.com/primer3-org/primer3/releases构建primer3 :
mv src/masker.c src/masker.c.bak
cat > src/masker.c << EOF
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define GETLINE_BUFLEN 128
static ssize_t getline(char** lineptr, size_t* n, FILE* stream)
{
char* bufptr;
char* p;
ssize_t size;
int c;
if (!lineptr || !n || !stream)
return -1;
bufptr = *lineptr;
size = *n;
c = fgetc(stream);
if (c == EOF)
return -1;
if (!bufptr) {
if ((bufptr = (char*)malloc(GETLINE_BUFLEN)) == NULL)
return -1;
size = GETLINE_BUFLEN;
}
p = bufptr;
while (c != EOF) {
if ((p - bufptr) > (size - 1)) {
size = size + GETLINE_BUFLEN;
if ((bufptr = (char*)realloc(bufptr, size)) == NULL)
return -1;
}
*p++ = c;
if (c == '\n') {
break;
}
c = fgetc(stream);
}
*p++ = 0;
*lineptr = bufptr;
*n = size;
return p - bufptr - 1;
}
EOF
cat src/masker.c.bak >> src/masker.c
make -Csrc install PREFIX=/usr/local CC_OPTS="-I/usr/local/include/mman-win32" LDLIBS="-Wl,--as-needed -lmman" &&
echo Success
推荐阅读
- javascript - 如何访问数据表并在回调函数之外的图表中添加/删除行?
- php - preg_match 注册时不区分大小写
- sharepoint-online - 如何使用 REST API 创建带有 id 的网站内容类型
- sql - 按一定数量的列分组,但在选择子句中排除它们
- python - 如何在 Python 中动态创建多个线程
- c# - CsvReader 未应用配置
- javascript - 如何将选定的头像存储到数据库中
- docker - wolkenkit 中 node-modules 容器的用途是什么?
- react-native - 如何修复“可读的原生映射到字符串”
- php - 如何过滤对象数组并检查最近的时间戳