首页 > 解决方案 > c++ 文件之间未定义的引用

问题描述

我在 clion 编辑器中有这个简单的程序

    //main.cpp
    #include "my.h"
    int main(){
        foo = 1;
        print_foo();
        return 0;
    }
    //my.cpp
    #include <iostream>
    #include "my.h"
    void print_foo(){
        std::cout << foo << std::endl;
    }
    //my.h
    #ifndef INC_Project
        #define INC_Project 
        extern int foo;
        void print_foo();    
    #endif //INC_Project
    cmake_minimum_required(VERSION 3.19)
    project(Project)
    set(CMAKE_CXX_STANDARD 11)
    add_executable(Project my.h my.cpp main.cpp)

我得到这个输出

[100%] 链接 CXX 可执行项目

/usr/bin/ld:CMakeFiles/Project.dir/my.cpp.o:警告:针对foo' in read-only section .text'的重定位

/usr/bin/ld:CMakeFiles/Project.dir/main.cpp.o:在函数“main”中:

/Project/main.cpp:5:对“foo”的未定义引用

/usr/bin/ld: CMakeFiles/Project.dir/my.cpp.o: 在函数`print_foo()'中:

/home/o/Documents/cpp/Project/my.cpp:6:未定义对“foo”的引用

/usr/bin/ld:警告:在 PIE 中创建 DT_TEXTREL

collect2:错误:ld 返回 1 个退出状态

make[3]: *** [CMakeFiles/Project.dir/build.make:118: Project] 错误 1

make[2]: *** [CMakeFiles/Makefile2:95: CMakeFiles/Project.dir/all] 错误 2

make[1]: *** [CMakeFiles/Makefile2:102: CMakeFiles/Project.dir/rule] 错误 2

make: *** [Makefile:137: Project] 错误 2

标签: c++cmakeclion

解决方案


推荐阅读