0

用cygwin和emacs很久了,集成一直有问题。cygwin 下的 xemacs 运行良好,但需要运行 xwindows,这很不愉快。然后我添加了 git bash 。

现在,如果你算一算,我在 windows 下有 4 个独立的 unix 实现:

cygwin
Qt (which runs mingw somewhere in there)
git bash
MSYS64

在 Windows 上运行本机的 emacs。

我想知道我是否可以合并和删除其中一些工具。cygwin 和 MSYS2 有 git 似乎很可笑。那为什么要有一个单独的 git bash 呢?根据我的阅读,git 无论如何都在 MSYS2 中运行。

但我高度怀疑。过去,cygwin 与 mingw 不一样。我发现了两个大错误——一个是运行时库,它在 mingw 上使用了本机库。因此,即使编译器相同,使用 long double 编译程序也会产生无法运行的程序。

我现在试过了,它在 MSYS2 中工作。那可能是因为他们正在使用所有 gnu 库,或者因为微软已经更新。

线程在 mingw 中也不起作用,但在 cygwin 中起作用。我刚刚在 MSYS2-64 中使用以下 C++ 代码进行了测试:

#include <thread>
#include <iostream>
#include <unistd.h>
using namespace std;

void f() {
    for (;;) {
        cout << "yo!\n";
        //      sleep(1);
    }
}

void g() {
    for (;;) {
        cout << "ho!\n";
        //      sleep(2);
    }
}

int main() {
    thread t1(f);
    thread t2(g);
    t1.join();
    t2.join();
    cout << "Done!\n";
    return 0;
}

在 emacs 下运行,如安装在 MSYS2 中,作业不会停止(我必须杀死 shell)。它确实在命令行上工作。如果我取消注释睡眠调用,它会同时挂在 MSYS2 bash 和 emacs 命令 shell 中。

然后是git的问题。

git bash 使用 /c/Users/myuser 作为存储 .ssh 的目录。有用

当我在cygwin下echo $HOME时,它显示/c/Users/myuser但它仍然尝试使用/home/myuser,它不存在,这意味着.ssh目录不存在,所以它失败了。所以我可以在 cygwin 中构建,但必须推入 git bash,这很烦人。我无法在 git bash 中构建,因为它没有完整的开发环境。

MSYS2 声称 HOME 是 /c/Users/myuser 但是在尝试 git push 时它说同样的错误:

无法创建目录“/home/myuser/.ssh”。所以在里面的某个地方,它仍然硬编码了 .ssh 应该在 /home/myuser 而不是 c:/Users/myuser 的概念。

更糟糕的是,在 cygwin 中有一个 /home 目录,我似乎记得它默认创建 /home/myuser 虽然它现在不存在。在 MSYS2 中,没有 DIRECTORY /home,我想知道是否应该创建一个。

我可以创建一个符号链接到 c:/Users/myuser,如果它在 Windows 下工作?我刚试过这个:

mkdir /home/
ln -s /c/Users/myuser /home/myuser

贝壳挂了。这不好!我杀了壳,又跑了。不知何故,那里有一个目录 /home/myuser (但不是我的符号链接)。它是如何产生的,我不知道。但是我在里面创建了一个符号链接.ssh,现在它可以工作了。但这让我很紧张,因为我不明白发生了什么。

MSYS64 比 cygwin 有很大的优势。有一个包管理器,它安装得更快,它比 cygwin 小得多。编译器较新。

emacs 和 MSYS64 仍然存在一些问题,我将在一个单独的问题中提出,但由于它似乎工作得很好,问题是,我能负担得起摆脱其他问题吗?我正在研究这个,看看我是否可以要求学生为 C++ 和数据结构类安装它,所以我绝对希望线程和编译能够工作。到目前为止我无法解决的错误包括:

是否有线程的解决方法

  1. /home/user 发生了什么?我让它工作了,但这可能会在以后咬人,它必须被理解。

  2. 是否还存在其他兼容性问题?

  3. 线程问题似乎仍然存在。

综上所述,有没有什么办法可以在MSYS2中使用git,我可以安全地摆脱git和cygwin吗?还是有理由保留 cygwin?我必须单独保留 git bash 吗?

4

0 回答 0