四次元口袋 2019-07-24 10:58 采纳率: 0%
浏览 762

什么是未定义的引用 / 未解析的外部符号错误,如何修复它?

请问什么是未定义的引用 / 未解析的外部符号错误,该如何修复它?

  • 写回答

5条回答 默认 最新

  • weixin_38166163 2019-07-24 11:23
    关注

    指定相互依赖的链接库的顺序是错误的
    如果library之间相互依赖,那么library链接的顺序确实很重要。 一般来说,如果 a 依赖于 b,那么 libA 必须出现在链接器标志中的 libB 之前。
    例如:

    // B.h#ifndef B_H#define B_H
    struct B {
        B(int);
        int x;};
    #endif
    // B.cpp#include "B.h"
    B::B(int xx) : x(xx) {}
    // A.h#include "B.h"
    struct A {
        A(int x);
        B b;};
    // A.cpp#include "A.h"
    
    A::A(int x) : b(x) {}
    // main.cpp#include "A.h"
    int main() {
        A a(5);
        return 0;};
    
    

    创建库:

    $ g++ -c A.cpp
    $ g++ -c B.cpp
    $ ar rvs libA.a A.o 
    ar: creating libA.a
    a - A.o
    $ ar rvs libB.a B.o 
    ar: creating libB.a
    a - B.o
    
    

    编译:

    $ g++ main.cpp -L. -lB -lA./libA.a(A.o): In function `A::A(int)':
    A.cpp:(.text+0x1c): undefined reference to `B::B(int)'
    collect2: error: ld returned 1 exit status
    $ g++ main.cpp -L. -lA -lB
    $ ./a.out
    
    

    所以再重复一遍,顺序确实很重要!

    评论

报告相同问题?

悬赏问题

  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办