GCC编译器更新后无法链接到gtk+3.0

GCC编译器更新后无法链接到gtk+3.0

在我的 Debian 9 系统上,我使用 Code::Blocks IDE 来编译和链接我的 gtk+3.0 应用程序。但更新到最新的 Debian 10 后,链接器无法正确链接到 gtk+3.0。

以下是我的 Code::Blocsk IDE 中的命令行宏:

  1. 将单个文件编译为目标文件:$compiler $options $includes -c $file -o $object
  2. 将目标文件链接到控制台可执行文件:$linker $libdirs -o $exe_output $link_objects $link_resobjects $link_options $libs

这是编译器创建目标文件的方式:

g++ -Wall -std=c++11 -g -fPIC -c /home/pekov/Workshop/CodeBlocks/UniPhy_dev/math_module/coordinateTransform.cpp -o obj/Debug/coordinateTransform.o

这是链接器失败的尝试(标志之后-rdynamic是我自己的编译良好的库):

g++ -o bin/Debug/tester obj/Debug/main.o -static-libgcc -lboost_iostreams -lboost_system -lboost_filesystem -lboost_serialization -lcomplex_bessel -larmadillo -lprocps -lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -rdynamic ../math_module/bin/Debug/libmath_module.so ../poroelasticity_module/bin/Debug/libporoelasticity_module.a ../shared_library/bin/Debug/libshared_library.so ../BEM-FEM_library/bin/Debug/libBEM-FEM_library.so ../BEM_module/bin/Debug/libBEM_module.a ../elasticity_module/bin/Debug/libelasticity_module.a ../CAD_module/bin/Debug/libCAD_module.a ../GUI_module/bin/Debug/libGUI_module.a ../expression_parser/bin/Debug/libparser.a

链接器消息位于第一个遇到的gtk+3.0函数中:

undefined reference to 'gtk_widget_get_type'

我尝试从链接器中提取更多信息,但除了上面的消息之外找不到其他任何信息。

系统升级后,gcc 编译器也升级了,我认为这可能是问题所在,但降级 gcc 绝对不是个好主意。我尝试使用 kali linux (滚动版本),但输出是相同的。

所以我找到了一个解决方案(从这里)通过将编译器从 gcc-9 更改为 gcc-7:

  1. sudo apt-get install gcc-7 g++-7 g++-7-multilib gfortran-7
  2. sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-7 --slave /usr/bin/gfortran gfortran /usr/bin/gfortran-7
  3. sudo update-alternatives --config gcc

现在它工作正常,但我希望它能与最新的 gcc-9 一起工作!

答案1

我不知道中的变量$linker $libdirs -o $exe_output $link_objects $link_resobjects $link_options $libs对应什么,但这里的问题是链接器现在按照遇到的顺序跟踪未定义的对象,并且仅解析之前丢失的对象。这意味着需要指定库需要其符号的对象:在您的示例中-lboost_iostreams ... -lglib-2.0需要位于后面。libparser.a

相关内容