VMware 8.0在Kubuntu Bionic中安装gcc未识别及模块编译报错求助
解决VMware 8在Kubuntu Bionic(gcc 7.3)上的安装与模块编译问题
1. 让VMware识别已安装的gcc
VMware 8的版本检测逻辑比较老旧,没法自动识别gcc 7.3,你可以通过设置环境变量强制指定gcc路径:
export CC=/usr/bin/gcc-7 export CXX=/usr/bin/g++-7
设置完成后,重新运行VMware安装程序,或者直接执行模块编译命令:
sudo vmware-modconfig --console --install-all
2. 修复vmmon模块编译错误
你遇到的编译报错,本质是VMware 8的代码不兼容Kubuntu Bionic默认的Linux 4.15内核,需要调整源码适配新内核的API变化,这里提供两种解决方式:
方法一:手动修改源码
- 打开vmmon模块的驱动文件:
sudo nano /usr/lib/vmware/modules/source/vmmon-only/linux/driver.c - 解决
incompatible-pointer-types错误:
找到vmuser_mops结构体里的.fault = LinuxDriverFault行,修改LinuxDriverFault函数的签名以适配新内核的参数要求:// 替换原函数定义 static int LinuxDriverFault(struct vm_area_struct *vma, struct vm_fault *vmf) { // 保留原函数逻辑,把原来的page、address参数替换为vmf->page、vmf->address return VM_FAULT_NOPAGE; } - 解决
implicit declaration of function 'init_timer'错误:
找到init_timer(&linuxState.pollTimer);行,替换为新内核的定时器初始化函数,同时确保顶部包含了<linux/timer.h>头文件:
还要同步调整// 在文件顶部添加头文件 #include <linux/timer.h> // 替换原init_timer调用 timer_setup(&linuxState.pollTimer, PollTimerCallback, 0);PollTimerCallback的签名,适配新内核的定时器回调要求:static void PollTimerCallback(struct timer_list *t) { // 用from_timer宏获取结构体指针,替换原来的unsigned long参数逻辑 LinuxState *state = from_timer(state, t, pollTimer); // 保留原函数的处理代码 }
方法二:应用社区补丁
社区有针对VMware 8适配Linux 4.15内核的现成补丁,操作更省心:
- 解压模块源码包:
cd /usr/lib/vmware/modules/source sudo tar xvf vmmon.tar sudo tar xvf vmnet.tar - 下载对应补丁(比如
vmware-8-kernel-4.15.patch)后,应用到源码目录:sudo patch -p1 < /path/to/vmware-8-kernel-4.15.patch - 重新打包模块:
sudo tar cvf vmmon.tar vmmon-only sudo tar cvf vmnet.tar vmnet-only - 重新编译安装模块:
sudo vmware-modconfig --console --install-all
3. 确保依赖齐全
编译前一定要安装好内核头文件和基础编译工具,避免因依赖缺失导致其他报错:
sudo apt update && sudo apt install linux-headers-$(uname -r) build-essential
内容的提问来源于stack exchange,提问作者user3749165
相关产品推荐
相关产品推荐

