0

我对 c++ 很陌生,但我知道其他几种语言(即 python、java、一点 C)。问题是当我编译我的代码并尝试打开一个新的 ImGui 窗口时,它会给出“未定义的引用”错误。我认为这是我如何设置文件的问题。我的 main.cpp 文件和 imgui 库都在同一个目录中,当我尝试使用“#include”imgui/imgui.h“”导入文件时,它仍然给我未定义的引用错误。我试图将所有 .h 和 .cpp 文件从 imgui 文件夹中拉出并放入与我的“Main.cpp”文件相同的目录中,但它仍然给我一个未定义的参考错误。我已经阅读了您将 .cpp 文件放入工作目录的安装说明,但它仍然无法正常工作并给了我同样的错误。任何帮助,将不胜感激。

#include <iostream>
using namespace std;

#include "imgui/imgui.h"

int main(){
    ImGui::Begin("Window");
    ImGui::End();
}

- - - - - - - - - - - - - - - - - - - - - - -输出 - - -----------------------------------------

/tmp/ccMXHI3r.o: In function `main':
Main.cpp:(.text+0x16): undefined reference to `ImGui::Begin(char const*, bool*, int)'
collect2: error: ld returned 1 exit status

-------------------------------------------我的工作目录---- --------

imgui       // imgui library folder that i downloaded from github
Main.cpp    // my cpp file where my code is
4

1 回答 1

1

问题似乎是缺少链接步骤,您需要告诉您的编译/链接过程链接到 imgui 库。
当您在 C/C++ 中包含标头时,您只是让编译器知道函数和其他声明的签名。然后你需要让你的链接器知道在哪里寻找代码,这将告诉它链接到库。

例如,使用 gcc,您可以使用以下调用进行编译 + 链接:

gcc foo.c -o foo -ldynLib

该示例将编译源代码“foo.c”,为此生成一个对象,并将其与动态库“dynlib”链接到最终的二进制“foo”(可执行文件)中。

在你的情况下,它可能是这样的:

gcc Main.cpp -o program -limgui

当然标志和步骤将取决于您的编译器/链接器,您还应该检查库的实际名称(imgui 只是一个猜测,因为我不知道那个库)

于 2020-09-17T20:47:04.707 回答