如何在Windows的Ubuntu Bash环境下编译基于XWindows的C++程序?
在WSL Ubuntu环境下编译XWindows C++程序的可行方案
我之前也折腾过在Windows的Ubuntu Bash(也就是早期WSL环境)里编译依赖XWindows的C++程序,虽然官方当时不直接支持Linux图形应用,但编译环节完全可以搞定,给你梳理下具体步骤:
确认依赖安装到位
你已经安装了libx11-dev,可以先验证下安装状态,避免包损坏:dpkg -l libx11-dev如果你的程序还用到其他X扩展库(比如Xext、Xrender),可以一并安装对应的开发包:
sudo apt-get install libxext-dev libxrender-dev修正Makefile的链接配置
这是最关键的一步!XWindows程序编译时必须显式链接X11库,否则会报一堆“未定义引用”的错误。假设你的源文件是xapp.cpp,给你一个示例Makefile:# 指定C++编译器 CC = g++ # 编译参数:开启警告、指定C++标准 CFLAGS = -Wall -Wextra -std=c++11 # 链接X11库 LIBS = -lX11 # 默认目标:编译生成可执行文件 all: xapp # 编译规则:依赖源文件,生成可执行文件 xapp: xapp.cpp $(CC) $(CFLAGS) -o $@ $< $(LIBS) # 清理生成的文件 clean: rm -f xapp重点是
LIBS = -lX11这一行,必须加到编译命令里,让编译器链接X11的库文件。执行编译
在终端里切换到代码目录,直接运行:make如果编译报错提示找不到X头文件(比如
X11/Xlib.h),可以手动指定头文件路径(不过正常安装libx11-dev后不需要),把CFLAGS改成:CFLAGS = -Wall -Wextra -std=c++11 -I/usr/include/X11额外提一句运行的事儿(可选)
编译成功后,如果想运行程序,你需要在Windows端装一个X服务器(比如VcXsrv或者Xming),启动X服务器后,在WSL终端里设置显示变量:export DISPLAY=:0之后就能运行你的X程序了。
内容的提问来源于stack exchange,提问作者kylejacobbecker
相关产品推荐
相关产品推荐

