C++ 在OS X上链接Box2D应用程序的问题

C++ 在OS X上链接Box2D应用程序的问题,c++,box2d,sdl,C++,Box2d,Sdl,我有一个SDL游戏,我一直在工作,作为我的第一个有点真实的项目。我决定介绍Box2D物理,因为我对碰撞检测不满意。所以我将它安装到/usr/local/lib/Box2D,文件夹中是Box2D.h和支持文件夹。我使用MacVim在OSX 10.9.2上编写代码进行开发,并从命令行使用clang++编译器 在我的游戏代码中,我只是尝试创建一个简单的世界来测试: #include <Box2D/Box2D.h> ....... world = new b2World(b2Vec2(0.0

我有一个SDL游戏,我一直在工作,作为我的第一个有点真实的项目。我决定介绍Box2D物理,因为我对碰撞检测不满意。所以我将它安装到/usr/local/lib/Box2D,文件夹中是Box2D.h和支持文件夹。我使用MacVim在OSX 10.9.2上编写代码进行开发,并从命令行使用clang++编译器

在我的游戏代码中,我只是尝试创建一个简单的世界来测试:

#include <Box2D/Box2D.h>
.......
world = new b2World(b2Vec2(0.0,9.81));
这是我的Makefile。Box2D位于/usr/local/lib/Box2D/Box2D.h中。我很确定我的问题在Makefile的某个地方

CXX = clang++
CXXFLAGS = -Wall -c -std=c++11 -I/usr/local/lib

SDL = -framework SDL2 -framework SDL2_image
LDFLAGS = $(SDL) -F /Library/Frameworks -L/usr/local/lib/Box2D

SRC_DIR = src
SOURCES = $(wildcard $(SRC_DIR)/*.cpp)

OBJ_DIR = obj
OBJECTS = $(subst $(SRC_DIR)/, $(OBJ_DIR)/, $(patsubst %.cpp, %.o, $(SOURCES)))
#$(warning $(OBJECTS))

BIN_DIR = bin
EXE = game

# run these no matter what
.PHONY: all clean run

all: $(EXE)

$(EXE): $(OBJECTS)
    @mkdir -p $(BIN_DIR)
    $(CXX) $(LDFLAGS) $(OBJECTS) -o $(BIN_DIR)/$(EXE) 

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
    @mkdir -p $(OBJ_DIR)
    $(CXX) $(CXXFLAGS) $< -o $@

clean:
    rm -rf obj bin

run:
    ./$(BIN_DIR)/$(EXE)
CXX=clang++
CXXFLAGS=-Wall-c-std=c++11-I/usr/local/lib
SDL=-frameworkSDL2-frameworkSDL2_映像
LDFLAGS=$(SDL)-F/Library/Frameworks-L/usr/local/lib/Box2D
SRC_DIR=SRC
SOURCES=$(通配符$(SRC_DIR)/*.cpp)
OBJ_DIR=OBJ
OBJECTS=$(subst$(SRC_DIR)/,$(OBJ_DIR)/,$(patsubst%.cpp,%.o,$(SOURCES)))
#$(警告$(对象))
BIN_DIR=BIN
EXE=游戏
#无论如何都要运行这些
.骗子:一切顺利
全部:$(EXE)
$(EXE):$(对象)
@mkdir-p$(BIN_DIR)
$(CXX)$(LDFLAGS)$(对象)-o$(BIN_DIR)/$(EXE)
$(OBJ_DIR)/%.o:$(SRC_DIR)/%.cpp
@mkdir-p$(OBJ_DIR)
$(CXX)$(CXXFLAGS)$<-o$@
清洁:
rm-右前obj箱
运行:
./$(BIN_DIR)/$(EXE)

您似乎从未在任何地方实际链接过Box2D库?您可以使用
-L
指定链接时要搜索的目录,但我看不到实际链接Box2D库(无论它叫什么)的
-L
选项

您的输出行似乎证明了这一点:

clang++ -framework SDL2 -framework SDL2_image -F /Library/Frameworks -L/usr/local/lib/Box2D    obj/Ball.o   obj/Game.o   obj/Paddle.o   obj/TextureManager.o   obj/main.o -o bin/game

您需要在其中获取
-lbox2d
(或Box2D库的正确名称)。

感谢您的及时回复。你的回答让我读了更多关于链接的内容,我很确定我跳过了一个相当关键的步骤。在链接Box2D之前构建它。我对C++非常陌生,现在应该是显而易见的了:我一回来就回来更新。
clang++ -framework SDL2 -framework SDL2_image -F /Library/Frameworks -L/usr/local/lib/Box2D    obj/Ball.o   obj/Game.o   obj/Paddle.o   obj/TextureManager.o   obj/main.o -o bin/game