はじめに
Qt に LibTorch を導入する方法を簡単にまとめておきます。
その際に吐かれたエラーについてもその解決法を記しておきます。
環境
OS : Ubuntu 22.04
Qt : 6.7.2
Qt Creator : 13.0.2
Libtorch のダウンロード
下記公式サイトから、欲しいものを選んでダウンロードし、zipファイルを解凍します。
その後、(中に入っている)libtorch ディレクトリを、ホームディレクトリの直下に配置しました。
この部分は、他の方が解説してくださっているので省略します。
CMakeLists.txt (LibTorch関連部分のみ抜粋)
LibTorch を使用するために、CMakeLists に追記します。
CMakeLists.txt
set(Torch_DIR $ENV{HOME}/libtorch/share/cmake/Torch)
# --- 中略 ---
find_package(Torch REQUIRED)
# --- 中略 ---
target_link_libraries(MainWindow ${TORCH_LIBRARIES})
エラー解消
とりあえず、Qt Creator 内で適当に .cpp ファイルを作成し、ビルドしてみます。
Sample.cpp
// LibTorch
#include <torch/torch.h>
#include <torch/script.h>
すると、次のようなエラーを吐かれました。
Error
error: expected unqualified-id before ‘)’ token
1566 | const std::vector<IValue>& slots() const {
| ^
原理としては単純で、Qt では slots が予約語になっているので、関数としての slots() を正しく認識できません。
なので、LibTorch のファイルを少し改変します。全部で4か所です。
slots() という名前が悪いだけなので、これを例えば、getSlots() とかにしてあげればよいだけです。
const std::vector<IValue>& getSlots() const { // Rename
エラーが出ている4か所すべてを slots() から getSlots() にします。(4か所で良かった...)
これで、ビルドすると、ちゃんと通ってくれました。めでたしめでたし。