【问题标题】:C++ libraries not linking against object files (G++)C++ 库不链接目标文件 (G++)
【发布时间】:2020-11-26 14:13:14
【问题描述】:

每当我尝试将 GLEW 链接到目标文件时,我都会收到此错误:

c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: Buffer.o:Buffer.cpp:(.text+0x1d): undefined reference to `_imp____glewGenBuffers'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: Buffer.o:Buffer.cpp:(.text+0x52): undefined reference to `_imp____glewDeleteBuffers'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: Buffer.o:Buffer.cpp:(.text+0x7c): undefined reference to `_imp____glewBindBuffer'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: Buffer.o:Buffer.cpp:(.text+0xa8): undefined reference to `_imp____glewBindBuffer'
collect2.exe: error: ld returned 1 exit status
Makefile:7: recipe for target 'main' failed

这编译正确:

main: main.cpp Buffer.hpp Buffer.cpp
  g++ -o main.exe main.cpp Buffer.cpp -DGLEW_STATIC ${INCLUDE_PATH} ${LIB_PATH} ${LIBS}

这会返回上面显示的错误。

main: main.cpp Buffer.o
  g++ -o main.exe main.cpp Buffer.o -DGLEW_STATIC ${INCLUDE_PATH} ${LIB_PATH} ${LIBS}

Buffer.o: Buffer.hpp Buffer.cpp
  g++ -c Buffer.cpp ${INCLUDE_PATH}

代码是完全相同的代码,所以我不知道问题是什么。我正在使用 mingw32-make 和 g++ (mingw)。

【问题讨论】:

  • @AlanBirtles 这是我能做到的最低限度
  • 我认为关键是它最小但不可重现。
  • @drescherjm 只需获取任何库并将其与使用该库的目标文件链接

标签: c++ compilation linker g++ gnu


【解决方案1】:

预处理器使用 GLEW_STATIC 来确定如何从 glew API 中预定义函数,因此您需要在编译缓冲区对象时提供它。或者,您可以在包含 glew.h 之前在包含 glew.h 的文件中添加“#define GLEW_STATIC”,您根本不需要将它作为参数传递给 g++。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2014-03-21
    • 2019-04-28
    • 1970-01-01
    相关资源
    最近更新 更多