我的C/C++语言学习进阶之旅在Android Studio里面把部分cpp代码抽出去为单独的cpp类,然后就会出现“undefined reference to“ 问题
Posted 字节卷动
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我的C/C++语言学习进阶之旅在Android Studio里面把部分cpp代码抽出去为单独的cpp类,然后就会出现“undefined reference to“ 问题相关的知识,希望对你有一定的参考价值。
一、问题描述
今天在android Studio想优化下代码,优化操作如下所示:
新增了几个类,如下所示:
然后编译就报错,如下所示:
../../../../../framework-native-video-render/filter/DataParsing.cpp:108: error: undefined reference to 'AdjustMonochrome::AdjustMonochrome()'
../../../../../framework-native-video-render/filter/DataParsing.cpp:110: error: undefined reference to 'AdjustMonochrome::setRed(float)'
../../../../../framework-native-video-render/filter/DataParsing.cpp:111: error: undefined reference to 'AdjustMonochrome::setGreen(float)'
../../../../../framework-native-video-render/filter/DataParsing.cpp:112: error: undefined reference to 'AdjustMonochrome::setBlue(float)'
../../../../../framework-native-video-render/filter/DataParsing.cpp:113: error: undefined reference to 'AdjustMonochrome::setCyan(float)'
../../../../../framework-native-video-render/filter/DataParsing.cpp:114: error: undefined reference to 'AdjustMonochrome::setMagenta(float)'
../../../../../framework-native-video-render/filter/DataParsing.cpp:115: error: undefined reference to 'AdjustMonochrome::setYellow(float)'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
二、排查问题
2.1 排查抽取出去的AdjustMonochrome.cpp是否在cmake文件中引入
CMake的配置如下,明显是包含AdjustMonochrome.cpp的,匹配的上这个规则
##自定义搜索规则
file(GLOB src-files
$CMAKE_SOURCE_DIR/*.cpp
$CMAKE_SOURCE_DIR/*/*.cpp
$CMAKE_SOURCE_DIR/*/*/*.cpp
$CMAKE_SOURCE_DIR/*/*/*/*.cpp
$CMAKE_SOURCE_DIR/*/*/*/*/*.cpp
$CMAKE_SOURCE_DIR/*/*/*/*/*/*.cpp
$CMAKE_SOURCE_DIR/*/*/*/*/*/*/*.cpp
)
# Creates and names a library, sets it as either STATIC
# or SHARED, and provides the relative paths to its source code.
# You can define multiple libraries, and CMake builds them for you.
# Gradle automatically packages shared libraries with your APK.
add_library( # Sets the name of the library.
$PROJECT_NAME
# 这句话注释掉,两个so合并成一个so
# 1. libXtcCustomEffectRender.so
# 2. libXtcOpenGLCross.so
# 合并之后只有一个libXtcOpenGLCross.so
# Sets the library as a shared library.
# SHARED
# Provides a relative path to your source file(s).
$src-files
)
2.2 使用Clean Project 和 Refresh Linked C++ Projects
使用Clean Project
和 Refresh Linked C++ Projects
这两个菜单选项
-
使用这两个菜单之前,有
.cxx目录和build目录
-
使用
Clean Project
这个菜单项目之后,build目录
被删除了,但是.cxx目录
还在!!!
当时我没有注意去查看这个.cxx目录
重新编译,报同样的"undefined reference to"
错误!
- 然后我再使用
Clean Project
这个菜单项并且我接着使用Refresh Linked C++ Projects
这个菜单选项
两个菜单选项执行完毕之后,我就出现编译项目,结果还是出现这个"undefined reference to"
错误。
2.3 解决问题
然后我就去看哪里还有一些编译缓存之类的没有清除,我就发现了上面2.2提到的.cxx目录
,
然后我将这个.cxx目录
直接手动的Delete掉。
删除之后,重新编译
然后重新执行了一遍2.2的介绍的Clean Project
和 Refresh Linked C++ Projects
这两个菜单选项,接着重新编译就编译成功了
Android Studio的缓存真的害死人!!!
Android Studio的缓存真的害死人!!!
Android Studio的缓存真的害死人!!!
三、总结
出现"undefined reference to"
问题的时候,从以下几个方面排查:
- 是否你代码真的有问题,从代码方面排查
- 代码方面排查发现没有问题的时候,你就得怀疑是不是
Android Studio
这个坑逼的锅,我出现了好几次这样代码重构之后,必须把所有缓存全部清除才能重新编译成功的,特别注意.cxx目录
一定要删除
以上是关于我的C/C++语言学习进阶之旅在Android Studio里面把部分cpp代码抽出去为单独的cpp类,然后就会出现“undefined reference to“ 问题的主要内容,如果未能解决你的问题,请参考以下文章
我的C/C++语言学习进阶之旅解决使用ninja命令的时候报错:ninja: error: loading ‘build.ninja‘: 系统找不到指定的文件。
我的C/C++语言学习进阶之旅解决使用ninja命令的时候报错:ninja: error: loading ‘build.ninja‘: 系统找不到指定的文件。
我的C/C++语言学习进阶之旅解决使用ninja命令的时候报错:ninja: error: loading ‘build.ninja‘: 系统找不到指定的文件。
我的C/C++语言学习进阶之旅在Android Studio里面把部分cpp代码抽出去为单独的cpp类,然后就会出现“undefined reference to“ 问题
我的C/C++语言学习进阶之旅在Android Studio里面把部分cpp代码抽出去为单独的cpp类,然后就会出现“undefined reference to“ 问题
我的C/C++语言学习进阶之旅 通过C++跨平台的预编译宏来区分不同的操作系统:Win32/Win64/Unix/Linux/MacOS/iOS/Android等