Xcode 和 SFML 链接问题:“未定义的符号:sf::Window::p ollEvent(sf::Event&) . . ."

Xcode & SFML linking issues: "Undefined symbol: sf::Window::pollEvent(sf::Event&) . . . "

提问人:Justin Byrne 提问时间:7/15/2023 更新时间:7/15/2023 访问量:40

问:

问题

尝试通过 Xcode 编译解决方案,同时收到以下错误:

构建信息

Xcode_Build_Log

尽管如此,编译得很好,在同一个本地系统上具有相同的和:makelibrariesdependancies

生成文件

# VARIABLES
## Binary
BIN := Entity-Simulation
SFML_V := 2.6.0

## Compiler
CXX := g++
CXX_FLAGS := -std=c++11

SRC_DIRS := ./include

LD_FLAG := -L../Build/Products/Debug

SRCS := $(shell find $(SRC_DIRS) -name '*.hpp')

OBJS := $(patsubst %.hpp, %.o, $(SRCS))

INC_DIRS := $(shell find $(SRC_DIRS) -type d)

# CONDITIONALS
ifeq ($(OS),Windows_NT)
    CLEAN := del $(OBJ_DIR) *.o && del $(BIN)
    LIBS := -lsfml-graphics -lsfml-systems -lsfml-window
else
    CLEAN := rm -f $(OBJS) *.o && rm -f $(BIN)
    LIBS := -lsfml-graphics.${SFML_V} -lsfml-system.${SFML_V} -lsfml-window.${SFML_V}
endif

# COMMANDS
## All
all: $(BIN)

## Binary
$(BIN): $(OBJS) main.cpp
    touch $@
    $(CXX) $(LD_FLAG) $(CXX_FLAGS) main.cpp $(OBJS) -o $@ $(LIBS) -march=native -v

## Objects
%.o: %.hpp
    $(CXX) -c $(CXX_FLAGS) $< -o $@

## Clean
clean:
    $(CLEAN)

Xcode 设置

Xcode(首选项)::Link Binary with Libraries, Embed Libraries

Xcode_Preferences-Link_Binary_with_Libraries-Embed_Libraries

Xcode(首选项)::Deployment Info, Frameworks and Libraries

Xcode_Preferences-Target-Deployment_Info-Frameworks_and_libraries

系统设置

终端::Library > Frameworks

Terminal_Library-Frameworks

终端::usr > local > include

Terminal_usr-local-include

终端::usr > local > lib

Terminal_usr-local-lib

终端::usr > local > Cellar > sfml > 2.6.0 > lib

Terminal_usr-local-Cellar-sfml-2.6.0-lib

目标

在 Xcode 中编译程序而不会发生冲突。

资源

GitHub 项目进行进一步检查;在必要的项目中

C++ Xcode macOS 链接器错误 SFML

评论

0赞 john 7/15/2023
我注意到的是,尽管 XCode 项目和 makefile 使用类似的库,但顺序不同。对 XCode 一无所知,但对于某些编译器来说,库顺序确实很重要。
0赞 Justin Byrne 7/15/2023
@john我更改了 (Xcode) :: 下库的顺序,并且与(图形、系统和窗口)的顺序相同,但没有成功。是的,编译过程中标头的顺序是绝对有意义的。但是,经过故障排除后,它似乎呈现相同的结果!?Link Binary With LibrariesEmbed LibrariesMakefile
1赞 john 7/15/2023
好吧,这只是一个猜测。奇怪的是,你只有两个未解析的符号,所以从库中挑选了一些符号。当库顺序很重要时,这是因为一个库的未解析仅在列表中的后续库中搜索。此外,如果您有两个相互引用的库,则需要两次提及其中一个库。这是链接器问题,而不是头文件问题。

答: 暂无答案