链接器命令程序在clang ++中通过使用模板失败

问题描述

我的文件如下:

main.cpp

#include "mylib.hpp"

// template <typename T>
// T add(T a,T b)
// {
//  return a + b;
// }

int main(int argc,char const *argv[])
{
    int result = add(90,4);
    cout << result << "\n";

    return 0;
}

mylib.hpp

#ifndef MYLIB_HPP
#define MYLIB_HPP

#include <iostream>
#include <cstdlib>
#include <fstream>

using std::cout;
using std::cin;

template <class T>
T add(T a,T b);

#endif

mylib.cpp

#include "mylib.hpp"

template <class T>
T add(T a,T b)
{
    return a + b;
}

Makefile

a.out: main.o mylib.o
    clang++ -std=c++17 main.o mylib.o
    
main.o: main.cpp mylib.hpp
    clang++ -c -std=c++17 main.cpp

mylib.o: mylib.cpp mylib.hpp
    clang++ -c -std=c++17 mylib.cpp

没有模板,或者当我在main.cpp(无多文件程序)中使用该功能时,一切工作正常,但是当我将其拆分为多个文件时,会出现以下错误

clang++ -c -std=c++17 mylib.cpp
clang++ -std=c++17 main.o mylib.o
Undefined symbols for architecture x86_64:
  "int add<int>(int,int)",referenced from:
      _main in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command Failed with exit code 1 (use -v to see invocation)
make: *** [a.out] Error 1

如何解决错误

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)