C++:使用 g++ 和 -m32 选项构建的 c++ 库在 Msys 下构建 wxWidgets 项目时出现 ld 不

C++: ld incompatibility error when building a wxWidgets project under Msys using c++ libraries that are built with with g++ and -m32 option

本文关键字:构建 项目 wxWidgets ld Msys c++ g++ 使用 -m32 C++ 选项      更新时间:2023-10-16

我有一个C++项目,包括外来C++代码(CoolProp)。这个外来代码我编译为静态库。编译器是带有 -m32 选项的 TDM-GCC Vers 5.1.0。我使用 TDM-GCC 版本 5.1.0 和 -m32 选项再次调用我的C++代码。我能够编译并运行一个小型命令行测试程序。整个编译序列(Windo 命令行提示符或 MSYS 1.0):

  1. 包装流体流动

g++ -c -o build/fluidflow.o -LC:/CoolProp/5.1.2/CoolProp/build -I./include -IC:/CoolProp/5.1.2/CoolProp/include src/fluidflow.cpp -lCoolProp -m32 && ar rcs build/libfluidflow.a build/fluidflow.o

  1. 包装公式

g++ -c -o build/formulae.o -I./include src/formulae.cpp -lm -m32 && ar rcs build/libformulae.a build/formulae.o

  1. 包装风机盘管

g++ -c -o build/fancoil.o -I./include src/fancoil.cpp -lm -m32 && ar rcs build/libfancoil.a build/fancoil.o

  1. 封装电路

g++ -c -o build/circuit.o -L./build -LC:/CoolProp/5.1.2/CoolProp/build -I./include src/circuit.cpp -IC:/CoolProp/5.1.2/CoolProp/include -lm -lfancoil -lformulae -lfluidflow -lCoolProp -m32 && ar rcs build/libcircuit.a build/circuit.o

  1. 封装单元

g++ -c -o build/cell.o -L./build -LC:/CoolProp/5.1.2/CoolProp/build -I./include src/cell.cpp -IC:/CoolProp/5.1.2/CoolProp/include -lm -lcircuit -lfancoil -lformulae -lfluidflow -lCoolProp -m32 && ar rcs build/libcell.a build/cell.o

  1. 测试程序,包装流体流动和风机盘管

g++ -o test/test_simple.exe -L./build -LC:/CoolProp/5.1.2/CoolProp/build -I./include test/test_simple.cpp -IC:/CoolProp/5.1.2/CoolProp/include -lm -lcell -lcircuit -lfancoil -lformulae -lfluidflow -lCoolProp -m32 && cd test & test_simple.exe

接下来,我尝试使用 wxWidgets(Vers 3.0)构建一个 GUI 程序。只要我没有调用我的库,我就可以使用 msys 编译G++ fancoil_gui.cpp wx-config --cxxflags --libs -o fancoil_gui当我尝试调用我的库时,例如 libformulae.a/formulae.h 我使用 -m32 选项,编译总是以这样的错误结束

c:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-W64-MINGW32/bin/ld.exe: 跳过不兼容的 C:/msys/1.0/local/lib/libwxregexu-3.0.a 时 搜索 -lwxregexu-3.0

操作系统是 64 位 Windows 7

如何在不产生错误的情况下执行此操作?

看起来不像错误。你在 PATH 上有一个 64 位库,但你要求链接器查找一个 32 位库。它只是告诉你它忽略了 64 位的。