我在 Windows 10 上使用WSL2(适用于 Linux 的 Windows 子系统) Ubuntu 18.04。我还使用 NetBeans 12.1。
如何使用 NetBeans 打开位于 WSL 文件系统上的项目?在 Windows 资源管理器中,文件系统可通过 访问\\wsl$,但如何让 NetBeans 打开该文件系统?
我在 Windows 10 上使用 Ubuntu 20.04.3 WSL。我将我的 C++ 程序(使用 SDL2 库)编译为名为“main”的可执行文件。
g++ -o main main.cpp CApp.cpp -lSDL2 -std=c++17
Run Code Online (Sandbox Code Playgroud)
当我尝试使用以下命令运行可执行文件时:
./main
Run Code Online (Sandbox Code Playgroud)
它返回:
error: XDG_RUNTIME_DIR not set in the environment.
Run Code Online (Sandbox Code Playgroud) 我在 WSL Ubuntu 上使用 g++。我使用 git 克隆了 GLFW 存储库,使用ccmake命令来配置和生成二进制文件,然后make在“build”目录中使用以最终创建文件.a。我安装了所有与 OpenGL 相关的库/usr/ld(我不记得到底安装了哪些库,因为我必须安装这么多。无论如何,g++ 命令有效,所以我认为它是成功的)。后来我在VS Code上做了一个项目,如下所示:
GLFW 包含文件夹来自上述克隆的存储库,GLAD 和 KHR 包含文件夹来自glad.dav1d.de,我将 GL 版本(在 API 下)设置为3.3,将 Profile 设置为Core。
在 中main.cpp,我放置了一段用于初始化 GLFW 的简单代码片段:
#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
int main()
{
// Initialize GLFW
if (!glfwInit()) {
std::cerr << "Failed to initialize GLFW" << std::endl;
return 1;
}
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
std::cout << "Success" << …Run Code Online (Sandbox Code Playgroud) 我有一行memset(C, 0, N*M);,其中 C 是双精度矩阵。(我正在使用 WSL。)
但是,如果我查看 gdb,矩阵中的某些元素将设置为其中之一-nan(0xffffffffffff8),而其他元素将设置为例如9.0096750001652956e-314。
第一个没有给出任何错误,但 a+=似乎没有改变任何东西(或者至少似乎没有使 nan 的东西消失),而第二个是一个问题,如果元素没有改变或只改变有+= 0,因为比较if (0 == C[i][j])失败。
如果我手动将值设置为 0,则根本不会出现这些问题。
这是 WSL 的事情,还是有什么memset我不明白的事情?
我在 Windows 计算机上安装了 mySQL 服务器,还安装了 WSL,这样我就可以在 Windows 计算机上使用 Linux 的所有优点。我有一个任务是使用 Express 来创建一个连接到数据库的 JS api,所以我运行我的 mySQL 服务器,一切都运行正常,但是当我使用 WSL 启动 JS apinode index.js并尝试连接到数据库时,它会抛出一个错误sql错误
Server running on port 8080 , http://localhost:8080
/mnt/c/Users/ngkil/Documents/VSCode/WebDevAssignment2022/Backend/index.js:43
if (err) { throw err; }
^
Error: connect ECONNREFUSED 127.0.0.1:3306
at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1195:16) {
errno: -111,
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 3306,
fatal: true
}
Node.js v18.1.0
Run Code Online (Sandbox Code Playgroud)
如果我从 CMD 运行相同的命令,node index.jsAPI 工作正常
Server running on port 8080 , http://localhost:8080
Connected to database …Run Code Online (Sandbox Code Playgroud) 我尝试使用 Scapy 配置 L3 套接字,如下所示:
from scapy.all import *
soc = conf.L3socket(iface="eth1")
Run Code Online (Sandbox Code Playgroud)
当我在 Ubuntu VM 中使用此代码时,一切正常,但是当我在 WSL 中使用此代码时,出现错误:
/usr/local/lib/python3.10/dist-packages/scapy/layers/ipsec.py:471: CryptographyDeprecationWarning: Blowfish has been deprecated
cipher=algorithms.Blowfish,
/usr/local/lib/python3.10/dist-packages/scapy/layers/ipsec.py:485: CryptographyDeprecationWarning: CAST5 has been deprecated
cipher=algorithms.CAST5,
Traceback (most recent call last):
File "........./python/test.py", line 2, in <module>
soc = conf.L3socket(iface="eth1")
File "/usr/local/lib/python3.10/dist-packages/scapy/arch/linux.py", line 486, in __init__
self.ins = socket.socket(
File "/usr/lib/python3.10/socket.py", line 232, in __init__
_socket.socket.__init__(self, family, type, proto, fileno)
OSError: [Errno 97] Address family not supported by protocol
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我正在尝试在Windows Terminal中打开WSL (Ubuntu) 选项卡,然后使用 WSL 在该选项卡中运行命令。我为此使用以下 PowerShell 命令:
wt new-tab -p "WSL (Ubuntu)" wsl echo "hallo"
Run Code Online (Sandbox Code Playgroud)
问题是,echo运行后,选项卡立即关闭。有办法让它保持打开状态吗?
powershell windows-subsystem-for-linux windows-terminal wsl-2
我们需要将 Windows 客户端应用程序连接到 Linux 服务器应用程序。Linux 端在 Windows 10 (10.0.19044) 中的 WSL2 之上运行。
我们想要使用 UNIX 域套接字,并遵循https://devblogs.microsoft.com/commandline/windowswsl-interop-with-af_unix/中的指导
服务器程序成功绑定到“本地”文件系统中的文件(例如/tmp/mysock),但无法绑定到已安装驱动器中的“Windows 端”文件(例如/mnt/c/mysock) ,这是服务器可以接受来自 Windows 端 AF_UNIX 套接字的连接所必需的。
我得到的 errno 是 95 :“不支持操作”我尝试使用 sudo 运行,但结果相同。
知道发生了什么事吗?
服务器代码是:
#include <sys/socket.h>
#include <sys/un.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <unistd.h>
#include <errno.h>
#undef NDEBUG
// filename comes as command-line argument
int main(int argc, char *argv[])
{
struct sockaddr_un addr;
int ret = -1;
printf("Starting NVC_LINUX...\n");
assert(argc == 2);
char *filename = argv[1]; …Run Code Online (Sandbox Code Playgroud) 使用 Windows 应用商店中的 blanco Ubuntu WSL 安装,从那里运行 VSCode,并在/home文件夹中存储库。未安装 WSL 扩展。
它已经工作了一段时间,但最终总是导致 WSL 崩溃。VSCode 无法连接,因为我也无法再通过终端连接到 WSL 安装。
然后我最终使用wsl --shutdown并cmd重新启动 Docker 以使其再次工作一段时间。但它不断回来。
有任何想法吗?
编辑:
\n我在第一次接触 signal.h 后就匆忙地写了这样的内容,所以我最初的问题有点到处都是,并且被很多更混乱的部分所困扰,这可能会让它变得更烦人/更困难回答。我似乎还误解了信号 \xe2\x80\x93 的“屏蔽”部分,我似乎认为屏蔽意味着信号将被丢弃,但实际上,我认为发生的情况是处理程序是\没有被触发,但信号被传输并“保持”(重复的信号被合并),直到从处理程序返回。
\n在这里重新措辞以突出显示我原始问题中仍然让我困惑的部分(原始问题仍然在下面,以免在没有明确上下文的情况下留下现有评论等):
据我所知,信号处理程序是在内核模式到用户模式转换时触发的。引用:
\n
\n(万一图像损坏,无论出于何种原因\xe2\x80\x93,它引自man 7 signal:“每当从内核模式转换到用户模式执行时[...]内核检查是否有一个待处理的未阻塞信号,进程已为其建立了信号处理程序。”)
我写下了下面的代码:
\nconst char* ON_SIGTSTP_ENTRY = "Got SIGTSTP.\\n";\nconst char* ON_SIGTSTP_EXIT = "Exiting SIGTSTP handler.\\n";\nconst char* ON_SIGINT_ENTRY = "Got SIGINT.\\n";\nconst char* ON_SIGINT_EXIT = "Exiting SIGINT handler.\\n";\n\nvoid ctrlZHandler(int sig_num) {\n write(1, ON_SIGTSTP_ENTRY, strlen(ON_SIGTSTP_ENTRY));\n kill(getpid(), SIGINT);\n write(1, ON_SIGTSTP_EXIT, strlen(ON_SIGTSTP_EXIT));\n}\n\nvoid ctrlCHandler(int sig_num) {\n write(1, ON_SIGINT_ENTRY, strlen(ON_SIGINT_ENTRY));\n kill(getpid(), SIGTSTP);\n write(1, ON_SIGINT_EXIT, strlen(ON_SIGINT_EXIT));\n}\n\nint main() {\n if(signal(SIGTSTP, ctrlZHandler) == SIG_ERR) {\n cout << "Failed to set SIGTSTP handler." << …Run Code Online (Sandbox Code Playgroud) windows-subsystem-for-linux ×10
wsl-2 ×4
c ×2
c++ ×2
ubuntu ×2
bind ×1
docker ×1
glfw ×1
linux ×1
mysql ×1
netbeans ×1
netbeans-12 ×1
node.js ×1
opengl ×1
powershell ×1
python-3.x ×1
scapy ×1
sdl-2 ×1
signals ×1
sockets ×1
ubuntu-18.04 ×1
unix-socket ×1
windows ×1