无法使用 bindgen 设置包含路径

问题描述

我正在尝试使用 bindgen 生成对 Qt6 的绑定。我已经按照 this 回答并尝试了这个:-

let bindings = bindgen::Builder::default()
    .header("exclient.hpp")
    .clang_arg("
        -I/usr/include/qt6
        -I/usr/include/qt6/QtCore
        -I/usr/include/qt6/QtGui
        -I/usr/include/qt6/QtQml
        -I/usr/include/qt6/QtQuick
    ")
    .parse_callbacks(Box::new(bindgen::CargoCallbacks))
    .generate()
    .expect("Unable to generate bindings");

但是当我尝试编译它时,出现以下错误:-


  --- stderr
  /home/hilomen/Development/qtrusttest/target/debug/build/exclient3-d982a3579dd42390/out
  warning: 
              -I/usr/include/qt6
              -I/usr/include/qt6/QtCore
              -I/usr/include/qt6/QtGui
              -I/usr/include/qt6/QtQml
              -I/usr/include/qt6/QtQuick
          : 'linker' input unused [-Wunused-command-line-argument]
  exclient.hpp:3:10: Fatal error: 'QObject' file not found
  warning: 
              -I/usr/include/qt6
              -I/usr/include/qt6/QtCore
              -I/usr/include/qt6/QtGui
              -I/usr/include/qt6/QtQml
              -I/usr/include/qt6/QtQuick
          : 'linker' input unused [-Wunused-command-line-argument],err: false
  exclient.hpp:3:10: Fatal error: 'QObject' file not found,err: true

我可以确认 /usr/include/qt6/QtCore/QObject 文件确实存在

解决方法

愚蠢的我,我应该使用 clang_args 而不是 clang_arg

let bindings = bindgen::Builder::default()
    .header("exclient.hpp")
    .clang_args(&[
        "-I/usr/include/qt6","-I/usr/include/qt6/QtCore","-I/usr/include/qt6/QtGui",])
    .parse_callbacks(Box::new(bindgen::CargoCallbacks))
    .generate()
    .expect("Unable to generate bindings");

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...