分页: 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 ?