Libtorch在Qt中使用的各种问题:slot和Qt的slot函数冲突,CXX_FLAGS中的-D_GLIBCXX_USE_CXX11_ABI=1引起的undefined问题

1.slot和Qt的slot函数冲突

https://github.com/pytorch/pytorch/issues/19405

解决办法就是在libtorch的库前后

#undef slots
#include "torch/torch.h"
#def slots Q_SLOTS

实测有用

2.CXX_FLAGS中的-D_GLIBCXX_USE_CXX11_ABI=1引起的undefined问题

https://github.com/pytorch/pytorch/issues/23301

大概理解了一下,就是两个库需要的g++参数不同,不能一起操作

因为我单独把有libtorch的操作都写到一个cpp中去了,用的也是cmake,没有用qmake

最后修改了flags.make和build.make两个文件

flags.make

# compile CXX with /usr/bin/c++
CXX_FLAGS =      -march=native -msse4.2 -mfpmath=sse  -fPIC -D_GLIBCXX_USE_CXX11_ABI=1 -std=gnu++11
CXX_FLAGS1 =      -march=native -msse4.2 -mfpmath=sse  -fPIC -D_GLIBCXX_USE_CXX11_ABI=0 -std=gnu++11

加了一条CXX_FLAGS1

build.make

CMakeFiles/3DMatch.dir/pointNetFeature.cpp.o: CMakeFiles/3DMatch.dir/flags.make
CMakeFiles/3DMatch.dir/pointNetFeature.cpp.o: ../pointNetFeature.cpp
	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=/media/jerry/data/github/qt/3DMatch-cmake/build/CMakeFiles --progress-num=$(CMAKE_PROGRESS_5) "Building CXX object CMakeFiles/3DMatch.dir/pointNetFeature.cpp.o"
	/usr/bin/c++  $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS1) -o CMakeFiles/3DMatch.dir/pointNetFeature.cpp.o -c /media/jerry/data/github/qt/3DMatch-cmake/pointNetFeature.cpp

CMakeFiles/3DMatch.dir/pointNetFeature.cpp.i: cmake_force
	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Preprocessing CXX source to CMakeFiles/3DMatch.dir/pointNetFeature.cpp.i"
	/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS1) -E /media/jerry/data/github/qt/3DMatch-cmake/pointNetFeature.cpp > CMakeFiles/3DMatch.dir/pointNetFeature.cpp.i

CMakeFiles/3DMatch.dir/pointNetFeature.cpp.s: cmake_force
	@$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green "Compiling CXX source to assembly CMakeFiles/3DMatch.dir/pointNetFeature.cpp.s"
	/usr/bin/c++ $(CXX_DEFINES) $(CXX_INCLUDES) $(CXX_FLAGS1) -S /media/jerry/data/github/qt/3DMatch-cmake/pointNetFeature.cpp -o CMakeFiles/3DMatch.dir/pointNetFeature.cpp.s

pointNetFeature.cpp就是使用libtorch的文件,将所有的CXX_FLAGS换成CXX_FLAGS1,最后成功了...不过这操作感觉太挫了,这样每次都要cmake之后都要重新这样改一下,但无奈实在不太会cmake,不知道具体该怎么操作。先在这里记录一下吧!不然下次忘了...用qmake感觉说不定也可以这样修改...

发布了15 篇原创文章 · 获赞 18 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/zhangruijerry/article/details/102955279