请问什么是未定义的引用 / 未解析的外部符号错误,该如何修复它?
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
所以再重复一遍,顺序确实很重要!
解决 无用评论 打赏 举报