libGL:
p:
(base) cch@cch-virtual-machine:~/learn_pybullet$ /home/cch/anaconda3/envs/py39/bin/python /home/cch/learn_pybullet/hello_world.py
pybullet build time: Nov 28 2023 23:52:03
startThreads creating 1 threads.
starting thread 0
started thread 0
argc=2
argv[0] = --unused
argv[1] = --start_demo_name=Physics Server
ExampleBrowserThreadFunc started
X11 functions dynamically loaded using dlopen/dlsym OK!
X11 functions dynamically loaded using dlopen/dlsym OK!
libGL error: MESA-LOADER: failed to open swrast: /usr/lib/dri/swrast_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
libGL error: failed to load driver: swrast
Creating context
Failed to create GL 3.3 context ... using old-style GLX context
Failed to create an OpenGL context
S:
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6
Why?:
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6
是一个用于在运行时强制加载指定共享库的环境变量设置。具体来说,它的作用如下:
1. 预加载指定的共享库
LD_PRELOAD
是一个环境变量,用于指定在程序执行之前预加载的共享库。通过设置 LD_PRELOAD
,可以在程序启动时优先加载特定的共享库,而不是系统默认加载的库。这在解决依赖问题和库版本冲突时非常有用。
2. 指定的库
在这个命令中,/usr/lib/x86_64-linux-gnu/libstdc++.so.6
是指向 GNU 标准 C++ 库(libstdc++)的共享库文件。libstdc++ 是 GCC 编译器(GNU Compiler Collection)的一部分,为 C++ 程序提供标准库支持。
3. 作用
通过预加载 libstdc++.so.6
,可以确保在运行某些依赖于特定版本 libstdc++ 的应用程序时,优先使用该版本的库。这对于解决由于不同版本的 libstdc++ 引起的兼容性问题非常有用。例如,如果某个应用程序需要 libstdc++.so.6 的特定版本,而系统默认加载的版本不符合要求,则可以通过设置 LD_PRELOAD
来强制使用所需版本。
具体例子
假设你有一个应用程序 myapp
,在运行时需要特定版本的 libstdc++。你可以通过以下方式运行应用程序:
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6
./myapp
这样可以确保 myapp
启动时优先加载指定的 libstdc++ 版本,而不是系统默认版本。
总结
设置 LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6
的作用是强制在运行程序时优先加载指定的 libstdc++ 共享库。这对于解决库版本冲突和依赖问题非常有用,确保应用程序能够找到并使用正确版本的共享库。
.bashrc
fi
在 Bash 脚本中,fi
是 if
语句的结束标志。Bash 使用 if
来判断条件,然后执行相应的代码块。fi
就是 if
的反转写法,表示 if
语句的结束。下面是一个简单的例子来展示 if
和 fi
的使用:
#!/bin/bash
if [ -e /etc/passwd ]; then
echo "The file /etc/passwd exists."
else
echo "The file /etc/passwd does not exist."
fi
在这个例子中:
if [ -e /etc/passwd ]; then
判断/etc/passwd
文件是否存在。- 如果条件为真,则执行
echo "The file /etc/passwd exists."
。 - 如果条件为假,则执行 `echo “The file /etc/passwd does not exist
.”`
- 最后用
fi
来结束if
语句块。
在你提供的 .bashrc
文件中,fi
的用法如下:
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi
这个 if
语句检查 debian_chroot
变量是否为空且 /etc/debian_chroot
文件是否可读。如果条件成立,则将 /etc/debian_chroot
文件的内容赋值给 debian_chroot
变量。这个 if
语句的结束用 fi
来表示。
再举一个例子:
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
color_prompt=yes
else
color_prompt=
fi
fi
这里有两个 if
语句,每个 if
块的结束都用 fi
标识。fi
的作用是标记条件语句的结束,以便脚本继续执行接下来的代码。
call
PowerShell 中的 CALL
命令无法使用的原因是因为 CALL
命令是批处理文件(Batch file)中的命令,而不是 PowerShell 的命令。PowerShell 有自己的一套命令和语法,不支持 CALL
命令。如果你想在 PowerShell 中运行脚本或调用命令,可以使用以下方法:
运行脚本文件
使用 .
符号或 &
运算符来运行脚本文件。例如:
# 使用点符号
. "C:\path\to\your\script.ps1"
# 使用 & 运算符
& "C:\path\to\your\script.ps1"
调用命令或可执行文件
直接输入命令或使用 &
运算符来调用可执行文件。例如:
# 直接输入命令
Get-Process
# 使用 & 运算符调用可执行文件
& "C:\Program Files\SomeApplication\app.exe"
使用 Start-Process
命令
如果需要以特定方式启动进程,可以使用 Start-Process
命令。例如:
Start-Process "notepad.exe"
使用 Invoke-Command
如果需要在远程计算机上执行命令,可以使用 Invoke-Command
。例如:
Invoke-Command -ComputerName RemoteComputer -ScriptBlock { Get-Process }
通过这些方法,你可以在 PowerShell 中执行脚本或调用命令,而无需使用 CALL
命令。