获得"undefined reference to"
Getting "undefined reference to"
我尝试了几件事来解决此问题,但是我只是无法抓住Cmake的头...
以下基本上是整个项目:
.
├── CMakeLists.txt
└── src
├── CMakeLists.txt
├── main.cpp
├── SubwordEncoder.cpp
└── SubwordEncoder.h
第一个(./CMakeLists.txt
(包含:
cmake_minimum_required(VERSION 3.5)
project(xlib)
set(CMAKE_CXX_STANDARD 11)
add_subdirectory(./src)
add_executable(main src/main.cpp)
和第二个(src/MakeLists.txt
(
file(GLOB_RECURSE xlib_SOURCES "*.cpp")
file(GLOB_RECURSE xlib_SURCES "*.h")
main.cpp
仅包含以下内容:
#include <string>
#include <iostream>
#include <stdio.h>
#include "SubwordEncoder.h"
int main() {
std::cout << "Hello World!" << std::endl;
auto encoder = new SubwordEncoder();
auto encoded = encoder->encode("Hello World!");
for (auto i : encoded) {
std::cout << i << std::endl;
}
return 0;
}
SubwordEncoder.h
#ifndef XLIB_SUBWORDENCODER_H
#define XLIB_SUBWORDENCODER_H
#include <string>
#include <vector>
class SubwordEncoder {
public:
std::vector<int> encode(std::string decoded);
};
#endif //XLIB_SUBWORDENCODER_H
和SubwordEncoder.cpp
#include "SubwordEncoder.h"
std::vector<int> SubwordEncoder::encode(std::string decoded) {
std::vector<int> vect;
vect.push_back(10);
vect.push_back(20);
vect.push_back(30);
return vect;
}
但是我一直遇到此错误:
/tmp/tmp.KYl9HEcObN/src/main.cpp:13: undefined reference to `SubwordEncoder::encode(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
我在做什么错?
注意:
我知道我可以做到这一点:
add_executable(main src/main.cpp src/SubwordEncoder.cpp src/SubwordEncoder.h)
,但我不想在这里添加每个文件。我希望src/
中的所有文件用于编译。
当您调用add_executable()
时,您仅包括main.cpp
而不是其他人,因此当您尝试在main()
中使用它时,SubwordEncoder::encode
是不确定的。尝试将您的cmake文件更改为这样的东西:
./cmakelists.txt
cmake_minimum_required(VERSION 3.5)
project(xlib)
set(CMAKE_CXX_STANDARD 11)
add_subdirectory(src)
./src/cmakelists.txt
file(GLOB_RECURSE xlib_SOURCES "*.cpp")
file(GLOB_RECURSE xlib_HEADERS "*.h")
add_executable(main ${xlib_SOURCES} ${xlib_HEADERS})
# Include the current folder for including headers.
target_include_directories(main PRIVATE ${CMAKE_CURRENT_LIST_DIR})
实际上导致文件被编译的任何一个CMAKE文件中的唯一行是add_executable(main src/main.cpp)
,并且唯一添加的文件是main.cpp。任何一个CMAKE文件中都没有任何东西可以告诉其编译其他源文件。
这些线
file(GLOB_RECURSE xlib_SOURCES "*.cpp")
file(GLOB_RECURSE xlib_HEADERS "*.h")
仅设置包含文件名列表的变量。然后没有任何包含这些文件中的任何汇编。您的选项是将这些文件添加到您的main
目标的汇编中,如SquaresKittles回答,或者将其编译为单独的库,然后将其链接到MAIN:
src/cmakelists.txt:
add_library(SubwordEncoder ${xlib_SOURCES})
./cmakelists.txt:
target_link_libraries(main SubwordEncoder)
相关文章:
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- Tensorflow c++ api undefined reference to 'tflite::D efaultErrorReporter()'
- 不断"Attempting to reference a deleted function"
- C++/SDL "initial value of reference to a non-const must be an lvalue"
- OpenCV undefined reference to 'cv::imread(cv::String const&, int)'
- Libcurl c++ "undefined reference to" (Windows/MinGW/g++)
- 尝试使用 extern "C" 调用 C 中的C++方法,得到"undefined reference to"对象的链接器错误
- 与映射和unordered_map相关的编译错误:"attempting to reference a deleted function"
- 将 QMutex 添加到类后的"Attempting to reference a deleted function"
- 多级继承错误 C2280:"atttempting to reference a deleted function"
- static_cast int to reference to int?
- C++:具有 const int 的类的 vector.erase 实例给出"attempting to reference a deleted function"错误 C2280
- "attempting to reference a deleted function"函数参数
- 错误 "Attempting to reference a deleted function" - 传回 unique_ptr 的值时
- 尝试使用 std::bind 重新分配 std::function 并得到错误"attempting to reference a deleted function"
- 我怎么知道"C2280 - attempting to reference a deleted function"发生在哪里?
- "Attempting to reference a deleted function"