我有一些c ++代码(Snowboy演示-demo.cc),并使用g ++在我的RaspPI Zero上成功构建了它:

g++ -D_GLIBCXX_USE_CXX11_ABI=0 -fPIC -I../../ -std=c++0x -Wall -Wno-sign-compare -Wno-unused-local-typedefs -Winit-self -rdynamic -DHAVE_POSIX_MEMALIGN -Iportaudio/install/include -O3    demo.cc portaudio/install/lib/libportaudio.a ../..//lib/rpi/libsnowboy-detect.a   -ldl -lm -Wl,-Bstatic -Wl,-Bdynamic -lrt -lpthread portaudio/install/lib/libportaudio.a -L/usr/lib/atlas-base -lf77blas -lcblas -llapack_atlas -latlas -lasound -o demo


要调试它,我尝试使用QtCreator并创建Qt项目文件:

QT -= gui
CONFIG += c++11 console
CONFIG -= app_bundle

HEADERS += demo.h
SOURCES += \
        demo.cc

INCLUDEPATH += ../../
INCLUDEPATH += portaudio/install/include

LIBS += -Lportaudio/install/lib \
    -lportaudio \
    -L../../lib/rpi -lsnowboy-detect \
    -L/usr/lib/atlas-base \
    -ldl -lm -lrt -lpthread \
    -lf77blas -lcblas -llapack_atlas -latlas -lasound


但是在QtCreator中使用此配置,我会收到构建错误:

/home/pi/Prj/snowboy/examples/C++/demo.cc:213: error: undefined reference to `snowboy::SnowboyDetect::SnowboyDetect(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'


我是否忘记在Qt项目文件中指定与g ++一起使用的任何参数?

您是否可以建议我一种简单的方法来调试Raspb Pi 0中具有外部依赖项的c ++代码?

最佳答案

Snowboy由于某种不敬虔的原因而要求您使用-D_GLIBCXX_USE_CXX11_ABI=0(将其搜索)。您在命令行中有此标志,在Snowboy的上下文中这是正确的,但在.pro文件中丢失了它。添加它。

QMAKE_CPPFLAGS += -D_GLIBCXX_USE_CXX11_ABI=0


或类似的东西。

您也可以尝试将语言标准选项降级为C ++ 98(不建议这样做,但是如果您的演示未使用任何c ++ 11特定的代码,则应该可以使用)。



我个人认为,2019年仍在使用-D_GLIBCXX_USE_CXX11_ABI=0的任何软件都需要报废或分叉,但任何让您浮出水面的东西都需要取消。

关于c++ - 在QtCreator中配置c++项目的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56331456/

10-09 06:32