我用的是 VMware Workstation 16.2.5, 试图将它自带的大量库替换成系统里的库。其他都成功,唯独 GtkMM 替换不了。一旦替换掉,就运行不起来,从日志可以看到缺少某些符号。根据以往的经验,这种现象一般是 gcc/g++ 的 ABI 问题。然后试着用 g++ 自己编译 GtkMM, 通过添加选项 -D_GLIBCXX_USE_CXX11_ABI=0 以及调整 -fabi-version= 来改变 ABI. 但最终都没成功替换,可能没有设对选项参数。
哪位有过这种经验,知道该如何调整 g++ 的选项来编译 VMware Workstation 16.2.5 所需的 GtkMM? 或者如果你无须自己编译,安装上系统的 GtkMM, 并且删除 VMware 自带的 GtkMM/PangoMM/AtkMM/CairoMM/GLibMM, 让它自动用上系统的库。如果这时能够成功打开 VMware Workstation 16.2.5 的界面,麻烦将你的发行版告诉我,让我研究一下。
怎样将 VMware 16 自带的 gtkmm 替换成系统的库?
-
- 帖子: 42
- 注册时间: 2012-02-06 11:26
- dwl301
- 帖子: 1131
- 注册时间: 2007-04-14 11:17
Re: 怎样将 VMware 16 自带的 gtkmm 替换成系统的库?
为啥要替换?都是直接使用官方提供的最新的二进制安装包。。
Gigabyte Aero 15
Intel Core i7-7700HQ
NVIDIA GeForce GTX 1060 (DISABLED)
2x8GB DDR4 2400MHz
M.2 NVME 2280 512G
M.2 NVME 2280 1024G
15.6" FHD 1920×1080
Intel Core i7-7700HQ
NVIDIA GeForce GTX 1060 (DISABLED)
2x8GB DDR4 2400MHz
M.2 NVME 2280 512G
M.2 NVME 2280 1024G
15.6" FHD 1920×1080
-
- 帖子: 10
- 注册时间: 2023-06-14 22:04
- 系统: microsoft
Re: 怎样将 VMware 16 自带的 gtkmm 替换成系统的库?
One possible solution is to compile GtkMM from source using g++ with the options -D_GLIBCXX_USE_CXX11_ABI=0 and -fabi-version=7. Another option is to install the system's GtkMM and remove VMware's GtkMM/PangoMM/AtkMM/CairoMM/GLibMM libraries, ensuring compatibility.
-
- 帖子: 42
- 注册时间: 2012-02-06 11:26
Re: 怎样将 VMware 16 自带的 gtkmm 替换成系统的库?
EdwardMatthew 写了: ↑2023-07-03 17:02 One possible solution is to compile GtkMM from source using g++ with the options -D_GLIBCXX_USE_CXX11_ABI=0 and -fabi-version=7. Another option is to install the system's GtkMM and remove VMware's GtkMM/PangoMM/AtkMM/CairoMM/GLibMM libraries, ensuring compatibility.
我按照您给出的参数 -D_GLIBCXX_USE_CXX11_ABI=0 -fabi-version=7 用 g++ 编译试过,无效。
libvmwareui.so 需要的两个符号 _ZNK4Glib10ObjectBase4gobjEv, _ZN4Glib10ObjectBase4gobjEv 分别来自它自带的 libglibmm-2.4.so.1 和 libatkmm-1.6.so.1
但如果自己去编译 glibmm 和 atkmm, 就编译不出那两个符号。
当然那两个符号只是来用举例,实际上远远不止两个。
是否跟具体的 GCC 版本有关?请问您用的是什么版本的 GCC? 编译出来的 libglibmm-2.4.so.1 用 strings 命令能否提取出 _ZNK4Glib10ObjectBase4gobjEv ?