MinGW 可能链接到 64 位 dll
MinGW possibly linking to 64bit dlls
我正在尝试让 SFML 与 Eclipse 一起工作,但我没有成功(运行宁 MinGW 3.17-2 和 gcc 4.8.1)
文件已编译,但当我尝试 运行 时,出现以下错误:
查看我的 MinGW\bin
文件夹,我只能看到一个 libgcc_s_dw2-1.dll
文件,经过一些搜索后,似乎要求的 dll 是 64 位版本?我的 OS 是 64 位的,但 MinGW 和 SFML 库都是 32 位的。
我该如何解决这个问题?
生成文件:
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
-include ../makefile.init
RM := rm -rf
# All of the sources participating in the build are defined here
-include sources.mk
-include subdir.mk
-include objects.mk
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(CC_DEPS)),)
-include $(CC_DEPS)
endif
ifneq ($(strip $(C++_DEPS)),)
-include $(C++_DEPS)
endif
ifneq ($(strip $(C_UPPER_DEPS)),)
-include $(C_UPPER_DEPS)
endif
ifneq ($(strip $(CXX_DEPS)),)
-include $(CXX_DEPS)
endif
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
ifneq ($(strip $(CPP_DEPS)),)
-include $(CPP_DEPS)
endif
endif
-include ../makefile.defs
# Add inputs and outputs from these tool invocations to the build variables
# All Target
all: Test
# Tool invocations
Test: $(OBJS) $(USER_OBJS)
@echo 'Building target: $@'
@echo 'Invoking: Cross G++ Linker'
g++ -L"F:\Libs\SFML-2.2\lib" -o "Test" $(OBJS) $(USER_OBJS) $(LIBS)
@echo 'Finished building target: $@'
@echo ' '
# Other Targets
clean:
-$(RM) $(CC_DEPS)$(C++_DEPS)$(EXECUTABLES)$(OBJS)$(C_UPPER_DEPS)$(CXX_DEPS)$(C_DEPS)$(CPP_DEPS) Test
-@echo ' '
.PHONY: all clean dependents
.SECONDARY:
-include ../makefile.targets
objects.mk:
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
USER_OBJS :=
LIBS := -lsfml-graphics-d -lsfml-system-d -lsfml-window-d
sources.mk:
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
C_UPPER_SRCS :=
CXX_SRCS :=
C++_SRCS :=
OBJ_SRCS :=
CC_SRCS :=
ASM_SRCS :=
C_SRCS :=
CPP_SRCS :=
O_SRCS :=
S_UPPER_SRCS :=
CC_DEPS :=
C++_DEPS :=
EXECUTABLES :=
OBJS :=
C_UPPER_DEPS :=
CXX_DEPS :=
C_DEPS :=
CPP_DEPS :=
# Every subdirectory with source files must be described here
SUBDIRS := \
. \
subdir.mk
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
# Add inputs and outputs from these tool invocations to the build variables
CPP_SRCS += \
../main.cpp
OBJS += \
./main.o
CPP_DEPS += \
./main.d
# Each subdirectory must supply rules for building sources it contributes
%.o: ../%.cpp
@echo 'Building file: $<'
@echo 'Invoking: Cross G++ Compiler'
g++ -I"F:\Libs\SFML-2.2\include" -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
@echo 'Finished building: $<'
@echo ' '
由于 C++ 中名称重整和非标准化 ABI 的工作方式,很遗憾,不同版本的编译器之间不兼容。在您的情况下,您甚至尝试使用与当前编译器不同的 "MinGW" 项目的编译器编译的库。但是,即使您使用相同的 "type" 编译器,C++ 库通常也不能跨次要版本或补丁版本重复使用。
首先,我真的建议不要使用原始的 MinGW 项目,而是使用基于 MinGW-w64 project 的编译器。如果你想知道原因,你可以问Google,已经有足够的讨论了。
其次,您要么需要选择一个与 SFML 包匹配的编译器,要么您需要自己构建 SFML。
- 对于 GCC 4.9.2 MinGW (DW2) - 32 位 包,我使用了 this compiler.
- 对于 GCC 4.7.1 TDM (SJLJ) - 32 位 包,我使用了 this Code::Blocks package.
附带的编译器
- 对于 GCC 4.8.1 TDM (SJLJ) - 32 位 包,我使用了 this Code::Blocks package.
附带的编译器
第三,如果你想要使用最新编译器版本的SFML的最新开发版本,你可以查看我的Nightly Builds。
我正在尝试让 SFML 与 Eclipse 一起工作,但我没有成功(运行宁 MinGW 3.17-2 和 gcc 4.8.1)
文件已编译,但当我尝试 运行 时,出现以下错误:
查看我的 MinGW\bin
文件夹,我只能看到一个 libgcc_s_dw2-1.dll
文件,经过一些搜索后,似乎要求的 dll 是 64 位版本?我的 OS 是 64 位的,但 MinGW 和 SFML 库都是 32 位的。
我该如何解决这个问题?
生成文件:
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
-include ../makefile.init
RM := rm -rf
# All of the sources participating in the build are defined here
-include sources.mk
-include subdir.mk
-include objects.mk
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(CC_DEPS)),)
-include $(CC_DEPS)
endif
ifneq ($(strip $(C++_DEPS)),)
-include $(C++_DEPS)
endif
ifneq ($(strip $(C_UPPER_DEPS)),)
-include $(C_UPPER_DEPS)
endif
ifneq ($(strip $(CXX_DEPS)),)
-include $(CXX_DEPS)
endif
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
ifneq ($(strip $(CPP_DEPS)),)
-include $(CPP_DEPS)
endif
endif
-include ../makefile.defs
# Add inputs and outputs from these tool invocations to the build variables
# All Target
all: Test
# Tool invocations
Test: $(OBJS) $(USER_OBJS)
@echo 'Building target: $@'
@echo 'Invoking: Cross G++ Linker'
g++ -L"F:\Libs\SFML-2.2\lib" -o "Test" $(OBJS) $(USER_OBJS) $(LIBS)
@echo 'Finished building target: $@'
@echo ' '
# Other Targets
clean:
-$(RM) $(CC_DEPS)$(C++_DEPS)$(EXECUTABLES)$(OBJS)$(C_UPPER_DEPS)$(CXX_DEPS)$(C_DEPS)$(CPP_DEPS) Test
-@echo ' '
.PHONY: all clean dependents
.SECONDARY:
-include ../makefile.targets
objects.mk:
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
USER_OBJS :=
LIBS := -lsfml-graphics-d -lsfml-system-d -lsfml-window-d
sources.mk:
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
C_UPPER_SRCS :=
CXX_SRCS :=
C++_SRCS :=
OBJ_SRCS :=
CC_SRCS :=
ASM_SRCS :=
C_SRCS :=
CPP_SRCS :=
O_SRCS :=
S_UPPER_SRCS :=
CC_DEPS :=
C++_DEPS :=
EXECUTABLES :=
OBJS :=
C_UPPER_DEPS :=
CXX_DEPS :=
C_DEPS :=
CPP_DEPS :=
# Every subdirectory with source files must be described here
SUBDIRS := \
. \
subdir.mk
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
# Add inputs and outputs from these tool invocations to the build variables
CPP_SRCS += \
../main.cpp
OBJS += \
./main.o
CPP_DEPS += \
./main.d
# Each subdirectory must supply rules for building sources it contributes
%.o: ../%.cpp
@echo 'Building file: $<'
@echo 'Invoking: Cross G++ Compiler'
g++ -I"F:\Libs\SFML-2.2\include" -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -o "$@" "$<"
@echo 'Finished building: $<'
@echo ' '
由于 C++ 中名称重整和非标准化 ABI 的工作方式,很遗憾,不同版本的编译器之间不兼容。在您的情况下,您甚至尝试使用与当前编译器不同的 "MinGW" 项目的编译器编译的库。但是,即使您使用相同的 "type" 编译器,C++ 库通常也不能跨次要版本或补丁版本重复使用。
首先,我真的建议不要使用原始的 MinGW 项目,而是使用基于 MinGW-w64 project 的编译器。如果你想知道原因,你可以问Google,已经有足够的讨论了。
其次,您要么需要选择一个与 SFML 包匹配的编译器,要么您需要自己构建 SFML。
- 对于 GCC 4.9.2 MinGW (DW2) - 32 位 包,我使用了 this compiler.
- 对于 GCC 4.7.1 TDM (SJLJ) - 32 位 包,我使用了 this Code::Blocks package. 附带的编译器
- 对于 GCC 4.8.1 TDM (SJLJ) - 32 位 包,我使用了 this Code::Blocks package. 附带的编译器
第三,如果你想要使用最新编译器版本的SFML的最新开发版本,你可以查看我的Nightly Builds。