仅在使用Terminal GCC和G ++进行编译时对Box2D的未定义引用

问题描述 投票:0回答:1

我在编译程序时遇到了麻烦,但这仅是因为Box2D静态库(对于Windows)。我链接的所有其他库都工作正常,编译器确实找到了.lib。起初,我想知道的可能是我在x86而不是x64上进行编译,但是我已经尝试了两者,并为x86获得了不兼容的库,为x64得到了我得到的错误消息:

C:\Users\Aether\AppData\Local\Temp\ccEPbRRr.o:main.cpp:(.text$_ZSt11make_uniqueI7b2WorldJ6b2Vec2EENSt9_MakeUniqIT_E15__single_objectEDpOT0_[_ZSt11make_uniqueI7b2WorldJ6b2Vec2EENSt9_MakeUniqIT_E15__single_objectEDpOT0_]+0x35): undefined reference to `b2World::b2World(b2Vec2 const&)'
C:\Users\Aether\AppData\Local\Temp\ccEPbRRr.o:main.cpp:(.text$_ZNKSt14default_deleteI7b2WorldEclEPS0_[_ZNKSt14default_deleteI7b2WorldEclEPS0_]+0x23): undefined reference to `b2World::~b2World()'
collect2.exe: error: ld returned 1 exit status

我用来编译的命令是:

g++ -std=c++14 -m64 -Iusr/inc -Iusr/includes -Iusr/src -o bin/Release/Starless.exe -Lusr/lib main.cpp -lfmodL64_vc -lopengl32 -lglew32s -lglfw3 -lSOIL -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lfreetype -lfmod64_vc -lBox2D

我还已经尝试过在指定文件之前和之后将-lBox2D移至,实际上,此刻几乎所有命令都已移入该命令,但仍然无法正常工作。

编辑:

让它与msbuild一起工作(这仍然没有解决),这给了我提示错误的信息。我之前没有提到过,我正在编译两个具有各自属性的项目,但是一个是.dll,另一个是依赖于.dll的.exe。他们俩都需要共享的唯一库是Box2D.lib。我猜测问题出在那儿,他们共享一个静态库,而在编译时只给出一次库的位置。这就是我目前所知道的全部,它可以与msbuild一起使用,但是我还是宁愿使用gnu编译器。

c++ gcc terminal g++ box2d
1个回答
0
投票

看起来您为包含文件(带有-I)和库(带有-L)指定的路径是相对路径,而不是绝对。因此,您要告诉它查看current目录下的内容。尽管您添加的包含内容可能会被忽略,并通过内置规则被发现,但它对编译之前的链接感到惊讶。您应该指定工具链和平台-我假设这是带有MinGW之类的Windows?

我问这些路径是否起作用:

    -Iusr/inc -Iusr/includes -Iusr/src

因为它们是相对路径,并且还应将/usr/include(没有's')作为标准路径。其他的似乎不规范,但是也许您已经在其中安装了一些源?

无论如何,主要问题是找到库,因此您可能希望库路径为/usr/lib(假定在其中安装了Box2D):

g++ -std=c++14 -m64 \
    -I/usr/inc -I/usr/includes -I/usr/src \
    -o bin/Release/Starless.exe \
    -L/usr/lib \
    -lfmodL64_vc -lopengl32 -lglew32s -lglfw3 -lSOIL \
    -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 \
    -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lodbc32 \
    -lodbccp32 -lfreetype -lfmod64_vc -lBox2D \
    main.cpp
© www.soinside.com 2019 - 2024. All rights reserved.