四次元口袋 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 win11家庭中文版安装docker遇到Hyper-V启用失败解决办法整理
  • ¥15 gradio的web端页面格式不对的问题
  • ¥15 求大家看看Nonce如何配置
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?