无法将库链接到 G++ 项目...我错过了什么吗?

Can't Link a Library to a G++ project... Am I missing something?

提问人:Jeremy Hahn 提问时间:11/11/2023 最后编辑:JaMiTJeremy Hahn 更新时间:11/11/2023 访问量:47

问:

所以这有点奇怪,我确信我在做一些愚蠢的事情。

我有一个正在处理的项目,并且我已经成功地将几个库链接到了该项目。但是,我现在正在尝试将音频库链接到项目,但它遇到了问题,即似乎该库没有正确链接。有问题的库是irrKlang,这里是cmake文件:

cmake_minimum_required(VERSION 3.23)
project(ProjectName)

set(CMAKE_CXX_STANDARD 14)

add_executable(ProjectName main.cpp Includes.h Defines.h)

target_link_libraries(ProjectName F:/Combustible/cmake-build-debug/libCombustible.a mingw32 opengl32 glu32 gdi32
F:/Combustible/Dependencies/Libraries/DevIL.lib F:/Combustible/Dependencies/Libraries/ILU.lib F:/Combustible/Dependencies/Libraries/ILUT.lib
F:/Combustible/Dependencies/Irrklang/lib/libirrKlang.a)

文件路径正确,所有其他库在连接时都没有问题。此外,irrKlang 确实有一个版本可以根据他们的网站与 gcc 一起使用,并且是我尝试使用的版本。我的编译器版本是:g++ 11.2

以下是 Cmake 的输出:

F:/ProjectName/main.cpp:50: undefined reference to `__imp__ZN8irrklang20createIrrKlangDeviceENS_21E_SOUND_OUTPUT_DRIVEREiPKcS2_'
collect2.exe: error: ld returned 1 exit status

尽管我所有其他库都运行正常,但我还是无法弄清楚这个问题,老实说,我真的无法在网上找到任何资源来提供帮助。从各方面来看,正如所写的那样,它应该可以工作,除非我遗漏了什么,甚至尝试以前的版本。我不指望这里的任何人都是这个库的专家,只是想我也许可以再看一双 Cmake,看看我是否做错了什么。我的预感是编译器正在寻找的符号和库包含的符号由于某种原因不匹配,但在他们的网站上提到它是 gcc 兼容的。就其价值而言,我在 fmod 上也遇到了同样的问题。

最后一点:该库确实带有一个 .def 文件,但我从来没有弄乱过这些文件,所以我不确定这是否是我无法链接的原因。此外,该库是 32 位库,我的编译器是 64 位库,但我认为这不会犯任何错误,因为我的所有其他库也是 32 位但没有问题。

提前致谢!

像链接过的所有其他库一样链接库。我以为它不会吐出一个未定义的引用。

C++ CMake 链接器 编译器构造 静态库

评论

0赞 Alan Birtles 11/11/2023
不能在单个可执行文件中混合使用 32 位和 64 位库。您可能最好从源代码构建库
0赞 n. m. could be an AI 11/11/2023
有一些事情正在发生。第一,您在 Windows 上使用 g++。所有其他库都需要使用 g++ 进行编译。使用 MSVC 编译/为 MSVC 编译的库将不起作用。第二,混合使用 32 位和 64 位库绝对行不通。(mingw32 等不是 32 位)。
0赞 Jeremy Hahn 11/12/2023
不知道。那么也许我的编译器也是 32 位,我只是不知道。无论哪种方式,我所有其他库都是 32 位库,并且编译得很好,我尝试链接的 Irrklang 库也是 32 位的,所以我认为应该没有任何问题。我并没有真正考虑过使用 MSVC 编译的库,正如他们在他们的网站上所说的那样,它与 gcc 兼容。哦,好吧,我给他们发了消息,希望我能得到关于兼容性的回复,或者他们是否在某个地方搞砸了兼容性。
0赞 n. m. could be an AI 11/12/2023
输入并查看“目标”行,它说了什么?gcc -v

答: 暂无答案