c – 链接时奇怪的未定义引用

c – 链接时奇怪的未定义引用,第1张

概述我在以下几行代码中重现了我在一个更大的项目中所经历的行为.我遗漏了#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) 我在以下几行代码中重现了我在一个更大的项目中所经历的行为.我遗漏了#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: allall: mklibs mainmain: main.cpp    g++ -o $@ main.cpp -L. -lABC -lOmklibs: libABC.a libO.alibABC.a: A.o BC.o    ar -r $@ $^libO.a: O.o    ar -r $@ $^
解决方法 有时链接顺序很重要,请尝试-lO -lABC 总结

以上是内存溢出为你收集整理的c – 链接时奇怪的未定义引用全部内容,希望文章能够帮你解决c – 链接时奇怪的未定义引用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1244378.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存