分页: 1 / 1

怎样将 VMware 16 自带的 gtkmm 替换成系统的库?

发表于 : 2023-06-22 7:30
offline
  我用的是 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 的界面,麻烦将你的发行版告诉我,让我研究一下。

Re: 怎样将 VMware 16 自带的 gtkmm 替换成系统的库?

发表于 : 2023-06-25 11:52
dwl301
为啥要替换?都是直接使用官方提供的最新的二进制安装包。。

Re: 怎样将 VMware 16 自带的 gtkmm 替换成系统的库?

发表于 : 2023-07-03 17:02
EdwardMatthew
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.

Re: 怎样将 VMware 16 自带的 gtkmm 替换成系统的库?

发表于 : 2023-08-24 16:03
offline
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 ?