gpt4 book ai didi

c++ - mingw32/bin/ld.exe…对[class]的 undefined reference …collect2.exe:错误:ld返回1退出状态

转载 作者:行者123 更新时间:2023-12-02 10:21:53 25 4
gpt4 key购买 nike

我尝试将代码从Linux迁移到Windows时的问题描述:

Windows链接程序问题

  • MinGW
  • 当我在Main.cpp中调用用户定义的类时发生

  • (如果我不在Main中调用用户定义的类构造函数,则效果很好)

  • 相关代码示例:

    人.hpp
    class Person
    {
    public:
    Person(const string& iName,
    const list<string>& iContactDetails,
    );

    virtual ~Person();
    ...

    Main.cpp
    #include "Person.hpp"
    ...
    int main()
    {
    ...
    Person myPerson = Person (myName, myContactDetails); //here is the linker problem
    ...
    return 0;
    }

    编译命令:

    独立的
    g++ -o MyProgram.exe Main.cpp -Wall

    Makefile(甚至尝试使用CC代替CXX,或者使用LDFLAGS = -lgdi32代替CXXFLAGS)
    EXECUTABLE = MyProgram.exe

    CXX = "C:\MinGW\bin\g++.exe"
    CXXFLAGS = -Wall // tried LDFLAGS=-lgdi32 as well

    src = $(wildcard *.cpp)
    obj = $(src:.cpp=.o)

    all: myprog

    myprog: $(obj)
    $(CXX) -o $(EXECUTABLE) $^ $(CXXFLAGS)

    .PHONY: clean
    clean:
    del $(obj) $(EXECUTABLE)

    错误:
    c:/mingw/bin/../lib/gcc/mingw32/8.2.0/../../../../mingw32/bin/ld.exe: C:\Users\....:Main.cpp:(.text+0x124c): undefined reference to `Person::~Person()'
    collect2.exe: error: ld returned 1 exit status

    作为总结,我在MinGW G++编译步骤中遇到了Linker问题:

    All external entity references are resolved. Library components are linked to satisfy external references to entities not defined in the current translation. All such translator output is collected into a program image which contains information needed for execution in its execution environment.



    我尝试遵循其他类似的问题,但不幸的是,它们是不同的问题:
  • C compiler error: undefined reference to function
  • What is an undefined reference/unresolved external symbol error and how do I fix it?
  • facing error in linking codes in c++

  • 我应该如何更改我的Makefile或代码? MinGW在Windows中使用哪些标志?非常感谢你

    最佳答案

    与我为How to correctly define and link a C++ class destructor to a main file?提供的答案相同

    我和你有同样的问题。尝试将构造函数和析构函数定义从cpp移到头文件中。这样,仅通过运行您提到的简单g++命令即可很好地完成链接,而您不需要Makefile。包括告诉您的编译器在哪里可以找到定义。

    尝试:

    MyClass(const string& className){ _className=className };

    如果定义在cpp文件中,则会收到与您相同的错误。

    关于c++ - mingw32/bin/ld.exe…对[class]的 undefined reference …collect2.exe:错误:ld返回1退出状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59828513/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com