我正在尝试在 Android 中编译我的 OpenGL 应用程序。我正在使用 [GLM 库] (0.9.4) 1
编译工作直到我包含:
#include <glm/glm.hpp>
此 header 添加 cmath 和链接器提示:
cmath:102:11: error: '::acos' has not been declared
...
cstdio:107:11: error: '::fprintf' has not been declared
似乎 std 在 CMakeLists.txt 上使用 std 或 libc++ 的标志配置时存在一些问题
我的 CMakeLists.txt 是:
status("")
status("* Adding module Core C++ ")
SET(PROJ_NAME CORE_CPP)
PROJECT(${PROJ_NAME})
# Helper to set libs & bin paths
INCLUDE(${PATH_MAIN}/cmake_tools/scripts/helperPaths.cmake)
# Include header from Module Core
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/include )
IF(DEP_GLM)
INCLUDE_DIRECTORIES( ${PATH_GLM} )
ENDIF(DEP_GLM)
# Source
#---------------------------------------------------#
file(GLOB CORE_CPP_SRC
"src/*.cpp"
)
file(GLOB CORE_CPP_HEADERS
"include/*.h"
)
# Create Library
ADD_LIBRARY(${PROJ_NAME} STATIC ${CORE_CPP_SRC} ${CORE_CPP_HEADERS})
#message("Link: ${LIBRARY_DEPS}")
SET( CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -pedantic -fPIC" )
SET( LIBRARY_DEPS GLESv2 log android)
TARGET_LINK_LIBRARIES(${PROJ_NAME} ${LIBRARY_DEPS})
status("- module ${PROJ_NAME} added! ")
- 在以前版本的 gcc 中,需要在其包含内容中添加 #define _GLIBCXX_USE_C99_MATH 1,但它已经在我的版本(4.8)中添加了
知道问题出在哪里吗?
最佳答案
我发现了问题,我将 header 包含在我的命名空间中,因此链接器正在寻找 std 中的另一个命名空间。
#ifndef MYNAME_MATH_H
#define MYNAME_MATH_H
#include <glm/glm.hpp> // Linker Work
namespace myname
{
//#define _GLIBCXX_USE_C99_MATH 1
//#include <glm/glm.hpp> // Make linker FAIL!
//typedef glm::vec2 Vector2;
//typedef glm::vec3 Vector3;
//typedef glm::vec4 Vector4;
}
#endif // MYNAME_MATH_H
关于android - 如何使用 Cmake 在 Android 中使用 GLM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20354969/