代码之家  ›  专栏  ›  技术社区  ›  john

与在头文件中声明并在源文件中定义的外部数组链接时出现问题

  •  0
  • john  · 技术社区  · 5 年前

    我需要声明一个非常大的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
    
    0 回复  |  直到 5 年前