首页 > 解决方案 > 如何在 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 版。

标签: windowscommand-linemakefilemingw32primer3

解决方案


我能够在 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

推荐阅读