CMake构建失败,因为找不到STL库

时间:2019-01-10 19:31:22

标签: android c++ c cmake

我正在尝试在Android Studio项目中使用.c和.cpp文件,我已经使用包含的所有文件配置了CMakeList。

我的CMakeList是这样的:

file(GLOB SOURCES "src/main/cpp/B/*.cpp")

add_library( # Sets the name of the library.
             native-lib

             # Sets the library as a shared library.
             SHARED

             src/main/cpp/native-lib.cpp
             src/main/cpp/A/B/src/a.c
             src/main/cpp/A/B/src/b.c
             src/main/cpp/A/B/src/c.c
             src/main/cpp/A/B/src/d.c
             src/main/cpp/A/a.cpp
             src/main/cpp/A/B/src/e.c
             src/main/cpp/B/a.cpp
             ${SOURCES})

考虑到我有这样的目录:

    +--- /cpp
    |       +--- /A
    |       |    +--- /B      
    |       |    |     +--- /include
    |       |    |     |     +-- *.h
    |       |    |     +--- /src
    |       |    |           +-- *.c
    |       |    |
    |       |    |
    |       +--- /B
    |       |     +--- /include
    |       |     |     +-- *.h
    |       |     +--- /src
    |       |           +-- *.cpp

当我运行项目时,我得到了

../include/a.h:68:10: fatal error: 'algorithm' file not found

a.h 中,我有此声明

#include <algorithm> 

另外,在我拥有的一行中:IDE使用命名空间std,说使用无法解析类型

我认为cmake有点以不正确的方式混合了.c和.cpp文件。

1 个答案:

答案 0 :(得分:1)

您正在C源文件(.c)中包含C ++标头。您不能期望gcc(由Cmake在遇到.c时调用的C源代码编译器)来理解C ++。

它可以在g++中使用,因为它是C ++编译器。请注意,g ++会将.c文件视为C ++(对.cxx.cpp的处理方式)。 CMake不会执行此操作,因为there are many different incompatibilities between C and C++