【发布时间】:2020-02-03 18:36:08
【问题描述】:
我在编译程序时遇到问题,但这仅仅是因为 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