我需要声明一个非常大的n-d数组。它在头文件中定义,从不更改。不幸的是编译主文件需要很长时间,所以我决定把它放到自己的对象文件中。
这是头文件表.hpp:
#pragma once
namespace TABLES
{
extern const int A[10][10][10];
extern const int B[10][10][10];
}
namespace TABLES
{
const int A[10][10][10] = {}; // use default for brevity
const int B[10][10][10] = {}; // use default for brevity
}
我的主要文件是:
#include "tables.hpp"
int main()
{
printf("%d", TABLES::A[0][0][0]);
}
这是我的Makefile:
CXX = clang++
CFLAGS = -std=c++17 -g -flto -Wall -Iinclude/
SRC = src/
INC = include/
tables.o: $(SRC)tables.cpp $(INC)tables.hpp
$(CXX) $(CFLAGS) -c $(SRC)tables.cpp
main: main.cpp tables.o
$(CXX) $(CFLAGS) -o main main.cpp tables.o
表.o编译成功,但我在将表.o链接到主程序时遇到问题:
undefined reference to `TABLES::A'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Makefile:30: recipe for target 'main' failed
make: *** [refactor] Error 1