Ubuntu 20.04下使用mingw编译FLTK项目出现Undefined Reference错误
交叉编译FLTK生成Windows程序报错解决方案
核心问题原因
原生g++编译正常是因为你链接的是适配Linux x86_64架构的FLTK库,而MinGW交叉编译Windows程序时,你当前fltk-1.3.7/lib目录下的库是Linux平台架构的编译产物,无法被MinGW识别,同时你链接了X11等Linux专属图形库,两者共同导致了未定义引用错误。
额外提示:你原命令中的交叉编译工具名少了开头的x,正确的工具名是x86_64-w64-mingw32-g++
具体操作步骤
- 首先安装MinGW相关依赖工具:
sudo apt install mingw-w64-tools mingw-w64-x86-64-dev
- 重新针对Windows x86_64架构交叉编译FLTK库,避免覆盖原有Linux版FLTK:
# 进入FLTK源码目录 cd fltk-1.3.7 # 配置交叉编译参数,指定独立安装路径 ./configure --host=x86_64-w64-mingw32 --prefix=/opt/fltk-mingw64 --enable-static --disable-shared # 编译安装 make -j$(nproc) sudo make install
- 修改编译命令,替换为MinGW版FLTK的路径,移除Linux专属链接参数:
MinGW编译Windows程序不需要链接X11、Xfixes、Xext等Linux图形库,需补充Windows系统库链接参数
x86_64-w64-mingw32-g++ helloworld.cpp -I/usr/include/eigen3 -I/opt/fltk-mingw64/include -L/opt/fltk-mingw64/lib -lfltk_images -lfltk -lole32 -luuid -lcomctl32 -ldl -o Decision_Master.exe
可选优化方案
可以直接调用交叉编译后的FLTK自带的配置工具自动生成编译参数,减少手动拼写错误:
x86_64-w64-mingw32-g++ helloworld.cpp -I/usr/include/eigen3 `/opt/fltk-mingw64/bin/fltk-config --cxxflags --ldflags --use-images` -o Decision_Master.exe
内容的提问来源于stack exchange,提问作者mohamad halwani
相关产品推荐
相关产品推荐

