VMware Workstation 12 unable to find GCC

Hi,

I’ve just installed VMware Workstation 12 in Tumbleweed with a copy of the bundle, using the following command:

sudo sh. VMware-Workstation-Full-12.1.0-3272444.x86_64.bundle

The installation ran smoothly with no issues. Now, when I try to open the application, a dialogue box appears telling me I need GNU C Compiler version 5.2.1 and if it isn’t installed in the default path, to manually enter the path. So, I search for the packages in YaST and install gcc and gcc-5, and then find that they are stored in /usr/bin. In the dialogue box I then manually enter /usr/bin - that doesn’t work. I then enter /usr/bin/gcc, which doesn’t work, then I try /usr/bin/gcc-5 - still no joy. I’ve also added other packages i’ve seen suggested around the internet, such as make, kernel-syms, kernel-source. Still can’t get it to run.

I hope that makes sense. Hopefully it’s not a case of VMware Workstation not being supported on tumbleweed.

Thanks,

D

Seems a common problem, see this https://forums.opensuse.org/showthread.php/513195-VMware-workstation?highlight=VMware

Hey man, I found your problem on the third page of some forum post from a couple years ago

Just copy and paste this into a root terminal:

cd /usr/lib/vmware/modules/source
unpack vmnet.tar
cd vmnet-only
make
cd …
unpack vmmon.tar
cd vmmon-only
make
cd …
cp vmmon.o /lib/modules/uname -r/kernel/drivers/misc/vmmon.ko
cp vmnet.o /lib/modules/uname -r/kernel/drivers/misc/vmnet.ko
depmod -a
/etc/init.d/vmware restart

Hey man, thanks for getting back so quick. Unfortunately I only get as far as ‘unpack’ then it says it’s not a recognised command. Have I done something wrong to my machine? haha

“unpack” is not a command AFAIK, but a common word for “tar -xf” e.g.; try:


tar -xf vmnet.tar

Thanks for the tip, and sorry if that was obvious - i’m fairly new to linux and the community etiquette.

I’ve been through the commands listed above and that has stopped the message appearing (thanks, by the way!) but now when I try to open VMware it appears temporarily loading in my task bar, but then disappears without loading into the program?

Please ignore the above post, VMware Workstation is now working!

Thank you to everyone who posted with suggestions, you were very helpful!

D

I have also run into this problem in Tumbleweed when installing VMWare Workstation 12 Pro.

I followed the instructions to unpack and make from source as root and ran into the following error:

gjjohnson@p50:/usr/lib/vmware/modules/source> su -
Password:
p50:~ # cd /usr/lib/vmware/modules/source
p50:/usr/lib/vmware/modules/source # tar -xvf vmnet.tar
vmnet-only/
vmnet-only/compat_module.h
vmnet-only/vnetEvent.c
vmnet-only/vnet.h
vmnet-only/nfhook_uses_skb.c
vmnet-only/compat_sock.h
vmnet-only/vmware_pack_init.h
vmnet-only/vm_basic_asm.h
vmnet-only/netif.c
vmnet-only/compat_netdevice.h
vmnet-only/compat_autoconf.h
vmnet-only/vnetKernel.h
vmnet-only/vm_basic_defs.h
vmnet-only/skblin.c
vmnet-only/userif.c
vmnet-only/vnetEvent.h
vmnet-only/compat_version.h
vmnet-only/Makefile.kernel
vmnet-only/vm_oui.h
vmnet-only/smac.c
vmnet-only/driver-config.h
vmnet-only/net.h
vmnet-only/vnetInt.h
vmnet-only/vmware_pack_begin.h
vmnet-only/monitorAction_exported.h
vmnet-only/Makefile
vmnet-only/vm_device_version.h
vmnet-only/vnetFilter.h
vmnet-only/smac.h
vmnet-only/vm_basic_asm_x86_64.h
vmnet-only/includeCheck.h
vmnet-only/vm_assert.h
vmnet-only/smac_compat.h
vmnet-only/vnetFilterInt.h
vmnet-only/smac_compat.c
vmnet-only/netdev_has_dev_net.c
vmnet-only/hub.c
vmnet-only/vm_basic_types.h
vmnet-only/x86cpuid.h
vmnet-only/vm_atomic.h
vmnet-only/vnetUserListener.c
vmnet-only/vm_basic_asm_x86_common.h
vmnet-only/geninclude.c
vmnet-only/community_source.h
vmnet-only/vm_basic_asm_x86.h
vmnet-only/bridge.c
vmnet-only/compat_skbuff.h
vmnet-only/driver.c
vmnet-only/COPYING
vmnet-only/procfs.c
vmnet-only/Makefile.normal
vmnet-only/vmnetInt.h
vmnet-only/netdev_has_net.c
vmnet-only/vmware_pack_end.h
p50:/usr/lib/vmware/modules/source # ls -l
total 5308
-rw-r–r-- 1 root root 839680 Jun 9 08:46 vmblock.tar
-rw-r–r-- 1 root root 1300480 Jun 9 08:46 vmci.tar
-rw-r–r-- 1 root root 1310720 Jun 9 08:46 vmmon.tar
drwxr-xr-x 2 root root 4096 Apr 14 16:48 vmnet-only
-rw-r–r-- 1 root root 880640 Jun 9 08:46 vmnet.tar
-rw-r–r-- 1 root root 1095680 Jun 9 08:46 vsock.tar
p50:/usr/lib/vmware/modules/source # cd vmnet-only
p50:/usr/lib/vmware/modules/source/vmnet-only # make
Using kernel build system.
make -C /lib/modules/4.6.0-1-default/build/include/… SUBDIRS=$PWD SRCROOT=$PWD/.
MODULEBUILDDIR= modules
make[1]: Entering directory ‘/usr/src/linux-4.6.0-1-obj/x86_64/default’
CC [M] /usr/lib/vmware/modules/source/vmnet-only/driver.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/hub.o
CC [M] /usr/lib/vmware/modules/source/vmnet-only/userif.o
In file included from /usr/src/linux-4.6.0-1/arch/x86/include/asm/processor.h:15:0,
from /usr/src/linux-4.6.0-1/arch/x86/include/asm/cpufeature.h:4,
from /usr/src/linux-4.6.0-1/arch/x86/include/asm/thread_info.h:52,
from /usr/src/linux-4.6.0-1/include/linux/thread_info.h:54,
from /usr/src/linux-4.6.0-1/arch/x86/include/asm/preempt.h:6,
from /usr/src/linux-4.6.0-1/include/linux/preempt.h:59,
from /usr/src/linux-4.6.0-1/include/linux/spinlock.h:50,
from /usr/src/linux-4.6.0-1/include/linux/wait.h:8,
from /usr/src/linux-4.6.0-1/include/linux/fs.h:5,
from /usr/src/linux-4.6.0-1/include/linux/highmem.h:4,
from /usr/lib/vmware/modules/source/vmnet-only/userif.c:26:
/usr/lib/vmware/modules/source/vmnet-only/userif.c: In function ‘UserifLockPage’:
/usr/src/linux-4.6.0-1/arch/x86/include/asm/current.h:17:17: warning: passing argument 1 of ‘get_user_pages’ makes integer from pointer without a cast -Wint-conversion]
#define current get_current()
^
/usr/lib/vmware/modules/source/vmnet-only/userif.c:116:28: note: in expansion of macro ‘current’
retval = get_user_pages(current, current->mm, addr,
^
In file included from /usr/src/linux-4.6.0-1/include/linux/highmem.h:7:0,
from /usr/lib/vmware/modules/source/vmnet-only/userif.c:26:
/usr/src/linux-4.6.0-1/include/linux/mm.h:1266:6: note: expected ‘long unsigned int’ but argument is of type ‘struct task_struct *’
long get_user_pages(unsigned long start, unsigned long nr_pages,
^
In file included from /usr/src/linux-4.6.0-1/arch/x86/include/asm/processor.h:15:0,
from /usr/src/linux-4.6.0-1/arch/x86/include/asm/cpufeature.h:4,
from /usr/src/linux-4.6.0-1/arch/x86/include/asm/thread_info.h:52,
from /usr/src/linux-4.6.0-1/include/linux/thread_info.h:54,
from /usr/src/linux-4.6.0-1/arch/x86/include/asm/preempt.h:6,
from /usr/src/linux-4.6.0-1/include/linux/preempt.h:59,
from /usr/src/linux-4.6.0-1/include/linux/spinlock.h:50,
from /usr/src/linux-4.6.0-1/include/linux/wait.h:8,
from /usr/src/linux-4.6.0-1/include/linux/fs.h:5,
from /usr/src/linux-4.6.0-1/include/linux/highmem.h:4,
from /usr/lib/vmware/modules/source/vmnet-only/userif.c:26:
/usr/src/linux-4.6.0-1/arch/x86/include/asm/current.h:17:17: warning: passing argument 2 of ‘get_user_pages’ makes integer from pointer without a cast -Wint-conversion]
#define current get_current()
^
/usr/lib/vmware/modules/source/vmnet-only/userif.c:116:37: note: in expansion of macro ‘current’
retval = get_user_pages(current, current->mm, addr,
^
In file included from /usr/src/linux-4.6.0-1/include/linux/highmem.h:7:0,
from /usr/lib/vmware/modules/source/vmnet-only/userif.c:26:
/usr/src/linux-4.6.0-1/include/linux/mm.h:1266:6: note: expected ‘long unsigned int’ but argument is of type ‘struct mm_struct *’
long get_user_pages(unsigned long start, unsigned long nr_pages,
^
/usr/lib/vmware/modules/source/vmnet-only/userif.c:117:10: warning: passing argument 5 of ‘get_user_pages’ makes pointer from integer without a cast -Wint-conversion]
1, 1, 0, &page, NULL);
^
In file included from /usr/src/linux-4.6.0-1/include/linux/highmem.h:7:0,
from /usr/lib/vmware/modules/source/vmnet-only/userif.c:26:
/usr/src/linux-4.6.0-1/include/linux/mm.h:1266:6: note: expected ‘struct page **’ but argument is of type ‘int’
long get_user_pages(unsigned long start, unsigned long nr_pages,
^
/usr/lib/vmware/modules/source/vmnet-only/userif.c:116:13: error: too many arguments to function ‘get_user_pages’
retval = get_user_pages(current, current->mm, addr,
^
In file included from /usr/src/linux-4.6.0-1/include/linux/highmem.h:7:0,
from /usr/lib/vmware/modules/source/vmnet-only/userif.c:26:
/usr/src/linux-4.6.0-1/include/linux/mm.h:1266:6: note: declared here
long get_user_pages(unsigned long start, unsigned long nr_pages,
^
/usr/src/linux-4.6.0-1/scripts/Makefile.build:292: recipe for target ‘/usr/lib/vmware/modules/source/vmnet-only/userif.o’ failed
make[4]: *** [/usr/lib/vmware/modules/source/vmnet-only/userif.o] Error 1
/usr/src/linux-4.6.0-1/Makefile:1454: recipe for target ‘module/usr/lib/vmware/modules/source/vmnet-only’ failed
make[3]: *** [module/usr/lib/vmware/modules/source/vmnet-only] Error 2
Makefile:146: recipe for target ‘sub-make’ failed
make[2]: *** [sub-make] Error 2
Makefile:24: recipe for target ‘__sub-make’ failed
make[1]: *** [__sub-make] Error 2
make[1]: Leaving directory ‘/usr/src/linux-4.6.0-1-obj/x86_64/default’
Makefile:120: recipe for target ‘vmnet.ko’ failed
make: *** [vmnet.ko] Error 2
p50:/usr/lib/vmware/modules/source/vmnet-only #

Any suggestions???

This problem about not being able to find a gcc has been and will always be a very common problem on TW for not only VMware but many other apps.

The real problem is that TW will always be pushing the latest, most bleeding edge version of GCC at all times, often in advance of what application maintainers use.

So, the simple solution really is to use an older version of gcc, and you can address however you want…
1.** Copy a gcc from one of the openSUSE stable repos.**
Plenty of ways to do this… Download from https://software.opensuse.org (don’t agree to add the repo).
Or, browse the repo branches at http://download.opensuse.org/repositories with a web browser and click to download when you find what you want.
2.** Disable or replace the TW gcc.**
I’ve done a feature request asking that TW be provided an update-alternatives to switch between gcc which I believe is needed badly. But, until that wish might ever be fulfilled, you will likely need to uninstall the defalt gcc and install one of the alternatives. Usually at least one and often two gcc are in the TW repo but a script won’t find it unless it’s the only one on your system (else you’d have to manually modify the script to point to a non-default gcc)

IMO,
TSU

Thank you! Worked for me on openSUSE Leap 42.2 + kernel 4.10.11 vanilla from the Kernel:stable OBS repo + VMware Workstation Player 12.5.5.

I took the liberty of replacing unpack by tar -xf in the quote above.

I would like to share, because maybe that helped: before doing what was suggested above, I installed the Base Development, **C/C++ Development **and Linux Kernel Development patterns, as suggested here, and the gcc-6 and gcc6-c++ packages from the devel:gcc OBS repo, as VMware Kernel Module Updater was asking for GCC 6.3.1.

Or, this thread can also be updated with an article I wrote how to configure an update-alternatives to switch between gcc so that your script (in this case the 2 stage VMware install script) can find the appropriate gcc version. Better than my old recommendation above to manually replace the gcc binary or digging into the script and editing the script to find the right gcc.

https://en.opensuse.org/User:Tsu2/gcc_update-alternatives

TSU

As I switched to the kernel 4.10.12 default from the Kernel:stable repo, I needed to repeat those steps. :\

Thanks for this! This procedure worked upon my transfer from Ubuntu 17.04 to OpenSUSE Tumbleweed. Although the kernel version was 4.10.x for both, VM WS 12.5.5 was unable to find the correct gcc although it was installed and active.

https://communities.vmware.com/thread/570804