c – 链接时奇怪的未定义引用
发布时间:2020-12-16 05:04:16 所属栏目:百科 来源:网络整理
导读:我在以下几行代码中重现了我在一个更大的项目中所经历的行为.我遗漏了#ifndef守卫和#include指令,试图提高可读性.调用make时会产生链接器错误. makefile包含在问题的末尾. C类继承自B的继承自A的O.O是完全不同的类. 链接器抱怨: g++ -o main main.cpp -L. -
我在以下几行代码中重现了我在一个更大的项目中所经历的行为.我遗漏了#ifndef守卫和#include指令,试图提高可读性.调用make时会产生链接器错误. makefile包含在问题的末尾.
C类继承自B的继承自A的O.O是完全不同的类. 链接器抱怨: g++ -o main main.cpp -L. -lABC -lO ./libO.a(O.o): In function `O::foo(A)': O.cpp:(.text+0x1f): undefined reference to `C::C(A const&)' 这是源代码.我试图让它尽可能小和可读.知道问题是什么? /***** A.h *****/ class A { public: A(); A(const A& a); }; /***** A.cpp *****/ A::A() {} A::A(const A& a) {} /****** BC.h *******/ class B : public A { public: B(const A& a); }; class C : public B { public: C(const A& a); }; /******* BC.cpp ********/ B::B(const A& a) : A(a) {} C::C(const A& a) : B(a) {} /***** O.h *****/ class O { public: void foo(A a); }; /***** O.cpp *****/ void O::foo(A a) { C c(a); } 这是主要的: /******* main.cpp *******/ int main() { A a; O o; o.foo(a); return 0; } 这是makefile: %.o: %.cpp %.h g++ -c $< .PHONY: all all: mklibs main main: main.cpp g++ -o $@ main.cpp -L. -lABC -lO mklibs: libABC.a libO.a libABC.a: A.o BC.o ar -r $@ $^ libO.a: O.o ar -r $@ $^ 解决方法
有时链接顺序很重要,请尝试-lO -lABC
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |