C ++:包括头文件导致“找不到架构符号”,同时包括.cpp文件

时间:2018-04-26 08:49:31

标签: c++ cmake clang ld clion

我正在编译一个包含多个头文件的项目,其中一个是带有通用功能的通用“utils”文件。

当我包含此utils文件的头文件时,编译失败(请参阅下面的错误),但是当我包含实际的.cpp文件时,它可以正常工作。

我在MacOS High Sierra上使用带有CLion的CMakeLists.txt文件。

以同样方式失败的最小等效项目:

main.cpp中:

#include "util.h"

int main() {
    print("Hello");
    return 0;
}

util.h:

#pragma once

#include <string>
#include <iostream>
#include <sstream>


template<typename T>
void print(T thing_to_print);

util.cpp:

#include "util.h"

template <typename T>
void print(T thing_to_print){
    std::cout << thing_to_print << std::endl;
}

的CMakeLists.txt:

cmake_minimum_required(VERSION 3.7)
project(example)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_VERBOSE_MAKEFILE ON)

SET(UTILS_MINIMAL_LIB_FILES util.h util.cpp)
add_library(utils_lib_minimal ${UTILS_MINIMAL_LIB_FILES})

add_executable(main_test main.cpp)
target_link_libraries(main_test utils_lib_minimal)

构建失败:

Undefined symbols for architecture x86_64:
  "void print<char const*>(char const*)", referenced from:
      _main in main.cpp.o
ld:  symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

但是,当我将include语句更改为:

#include "util.cpp"

编译成功完成。

有什么想法吗? 提前谢谢。

0 个答案:

没有答案