一、大致流程
先用VS编写程序=》然后转成.pro(或者添加并编写一个pro文件)=》再在windows上先用QTCreator打开编译,先过滤一遍问题=》再复制到linux上,开启QTCreator,打开pro项目=》添加include\lib路径=》编译;

二、具体
将VS编写的QT程序移植到Linux需要以下步骤,这里详细说明具体操作:
📋 移植前准备工作
1. 确保代码跨平台
// 检查代码中是否包含Windows特定代码
#ifdef _WIN32
// Windows特定代码
#else
// Linux兼容代码
#endif
// 避免使用Windows API
// 使用QT跨平台API替代:
// QDir 代替 Windows目录操作
// QProcess 代替 system()
// QSettings 代替 Windows注册表
2. 清理VS特定配置
-
移除
.vcxproj、.sln等VS工程文件 -
检查是否使用了Windows-only的第三方库
-
确认所有文件使用UTF-8编码(避免中文乱码)
🛠️ 移植步骤
步骤1:在Linux上安装QT开发环境
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install qt5-default qtcreator build-essential
# CentOS/RHEL
sudo yum install qt5-qtbase-devel qt-creator gcc-c++
# 验证安装
qmake -v
g++ --version
步骤2:准备项目文件
创建 .pro 文件(QT项目文件):
# 示例 myproject.pro
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = MyApp
TEMPLATE = app
SOURCES += main.cpp \
mainwindow.cpp \
# 添加所有.cpp文件
HEADERS += mainwindow.h \
# 添加所有.h文件
FORMS += mainwindow.ui \
# 添加所有.ui文件
RESOURCES += resources.qrc
# Windows特定库(注释掉或条件编译)
# win32: LIBS += -luser32 -lgdi32
# Linux特定库
unix: LIBS += -lpthread
步骤3:文件传输到Linux
# 使用FileZilla将所有源文件传输到Linux
# 包括:
# - 所有 .cpp、.h、.ui 文件
# - 资源文件(图片、图标等)
# - .pro 文件
# - CMakeLists.txt(如果用CMake)
# 或者使用scp
scp -r /本地/项目路径/ user@linux_ip:/home/user/projects/
步骤4:在Linux上编译
# 1. 进入项目目录
cd /home/user/projects/myproject
# 2. 生成Makefile
qmake myproject.pro
# 3. 编译
make -j4 # -j4表示使用4个核心并行编译
# 4. 运行测试
./MyApp
步骤5:处理常见移植问题
问题1:Windows API函数
// ❌ Windows专用
GetCurrentDirectory();
Sleep(1000);
// ✅ QT跨平台替代
QDir::currentPath();
QThread::msleep(1000);
问题2:文件路径差异
// ❌ Windows风格路径
QString path = "C:\\Users\\project\\file.txt";
// ✅ 跨平台路径
QString path = QDir::homePath() + "/project/file.txt";
// 或使用QDir
QDir dir(QDir::homePath());
dir.cd("project");
QString path = dir.filePath("file.txt");
问题3:第三方库差异
# 在.pro文件中分开
win32 {
LIBS += -lopengl32
INCLUDEPATH += "C:/libs/include"
LIBS += -L"C:/libs/lib" -lmylib
}
unix {
LIBS += -lGL
INCLUDEPATH += "/usr/local/include"
LIBS += -L"/usr/local/lib" -lmylib
}
问题4:字符编码
// 确保使用UTF-8
QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
步骤6:使用CMake替代(可选)
如果项目复杂,建议使用CMake:
CMakeLists.txt 示例:
cmake_minimum_required(VERSION 3.5)
project(MyProject LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt5 COMPONENTS Core Widgets REQUIRED)
set(SOURCES
main.cpp
mainwindow.cpp
)
set(HEADERS
mainwindow.h
)
set(UI_FILES
mainwindow.ui
)
qt5_wrap_cpp(MOC_SOURCES ${HEADERS})
qt5_wrap_ui(UI_SOURCES ${UI_FILES})
add_executable(MyProject ${SOURCES} ${MOC_SOURCES} ${UI_SOURCES})
target_link_libraries(MyProject Qt5::Core Qt5::Widgets)
编译:
mkdir build
cd build
cmake ..
make
🔧 调试与优化
1. 常见错误处理
# 找不到QT模块
# 编辑.pro文件,添加缺失模块:
QT += network sql xml multimedia
# 链接错误
# 安装缺失的开发包:
sudo apt-get install libgl1-mesa-dev libx11-dev
# 运行时找不到库
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
# 或使用rpath
QMAKE_LFLAGS += -Wl,-rpath,/usr/local/lib
2. 打包部署
# 1. 使用linuxdeployqt(类似windeployqt)
# 下载:https://github.com/probonopd/linuxdeployqt
# 2. 打包
linuxdeployqt MyApp -appimage
# 3. 生成AppImage
./MyApp.AppImage
📁 项目结构示例
MyProject/
├── CMakeLists.txt # CMake构建文件
├── MyProject.pro # QT项目文件
├── src/
│ ├── main.cpp
│ ├── mainwindow.cpp
│ └── mainwindow.h
├── ui/
│ └── mainwindow.ui
├── resources/
│ ├── images/
│ └── icons/
├── build/ # 编译目录
└── README.md
💡 最佳实践建议
-
使用版本控制:Git管理代码
-
持续集成:配置GitHub Actions或GitLab CI自动测试Linux构建
-
容器化:使用Docker确保环境一致性
FROM ubuntu:20.04 RUN apt-get update && apt-get install -y qt5-default g++ COPY . /app WORKDIR /app RUN qmake && make -
跨平台开发工具:
-
在Windows上使用WSL2开发Linux版本
-
或使用VirtualBox/VMware虚拟机
-
🚀 快速测试脚本
#!/bin/bash
# build_linux.sh
echo "清理旧构建..."
rm -rf build
mkdir build
cd build
echo "生成构建文件..."
qmake ../MyProject.pro
echo "编译..."
make -j$(nproc)
echo "运行测试..."
if [ -f MyApp ]; then
./MyApp
else
echo "构建失败!"
exit 1
fi
这样你的VS QT程序就能成功移植到Linux了!遇到具体问题时可以提供错误信息,我会给出针对性解决方案。
三、比如下载了ffmpeg-3.2.2.tar.bz2之后,复制到linux上后,如何配置使用?
下载 ffmpeg-3.2.2.tar.bz2 后,在 Linux 上配置和使用的完整步骤如下:
📦 1. 解压文件
# 进入存放文件的目录
cd ~/下载 # 或你存放的目录
# 解压.bz2文件
tar -xjvf ffmpeg-3.2.2.tar.bz2
# 进入解压后的目录
cd ffmpeg-3.2.2
🔧 2. 安装编译依赖
# Ubuntu/Debian
sudo apt-get update
sudo apt-get install -y \
build-essential \
yasm \
nasm \
cmake \
libx264-dev \
libx265-dev \
libvpx-dev \
libmp3lame-dev \
libopus-dev \
libvorbis-dev \
libfdk-aac-dev \
libass-dev \
libfreetype6-dev \
libsdl2-dev \
pkg-config \
wget
# CentOS/RHEL/Fedora
sudo yum install -y \
gcc gcc-c++ make \
yasm nasm cmake \
libx264-devel \
libx265-devel \
libvpx-devel \
lame-devel \
opus-devel \
libvorbis-devel \
fdk-aac-devel \
libass-devel \
freetype-devel \
sdl2-devel \
pkgconfig
⚙️ 3. 配置编译选项
# 基本配置(推荐新手)
./configure \
--prefix=/usr/local/ffmpeg \
--enable-shared \
--enable-gpl \
--enable-libx264 \
--enable-libx265 \
--enable-libvpx \
--enable-libmp3lame \
--enable-libopus \
--enable-libvorbis \
--enable-libfdk-aac \
--enable-libass \
--enable-nonfree \
--extra-cflags="-I/usr/local/include" \
--extra-ldflags="-L/usr/local/lib"
# 高级配置(更多功能)
./configure \
--prefix=/usr/local/ffmpeg \
--enable-shared \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--enable-pthreads \
--enable-libx264 \
--enable-libx265 \
--enable-libvpx \
--enable-libmp3lame \
--enable-libopus \
--enable-libvorbis \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libass \
--enable-openssl \
--enable-libfontconfig \
--enable-filter=drawtext \
--enable-debug=0 \
--disable-static \
--extra-cflags="-I/usr/local/include -O2" \
--extra-ldflags="-L/usr/local/lib"
🛠️ 4. 编译和安装
# 编译(使用多核加速)
make -j$(nproc) # $(nproc)获取CPU核心数
# 安装
sudo make install
# 如果需要卸载旧版本
sudo make uninstall
🔗 5. 配置系统路径
# 添加ffmpeg到系统PATH
echo 'export PATH=/usr/local/ffmpeg/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/ffmpeg/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
# 使配置生效
source ~/.bashrc
# 验证安装
ffmpeg -version
📝 6. 创建符号链接(可选)
# 为方便使用,创建软链接到系统目录
sudo ln -sf /usr/local/ffmpeg/bin/ffmpeg /usr/local/bin/ffmpeg
sudo ln -sf /usr/local/ffmpeg/bin/ffprobe /usr/local/bin/ffprobe
sudo ln -sf /usr/local/ffmpeg/bin/ffplay /usr/local/bin/ffplay
# 更新动态链接库缓存
sudo ldconfig
🧪 7. 测试FFmpeg
# 测试基本功能
ffmpeg -version
# 查看支持的编解码器
ffmpeg -codecs
# 查看支持的格式
ffmpeg -formats
# 简单转换测试
ffmpeg -i input.mp4 output.avi
# 播放视频测试
ffplay test.mp4
🎬 8. 常用命令示例
# 1. 视频转换格式
ffmpeg -i input.mp4 output.avi
# 2. 提取音频
ffmpeg -i video.mp4 -vn -acodec mp3 audio.mp3
# 3. 提取视频(去掉音频)
ffmpeg -i video.mp4 -an -vcodec copy video_no_audio.mp4
# 4. 调整视频大小
ffmpeg -i input.mp4 -vf scale=640:480 output.mp4
# 5. 裁剪视频
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:00 -c copy output.mp4
# 6. 合并音频和视频
ffmpeg -i video.mp4 -i audio.mp3 -c:v copy -c:a aac output.mp4
# 7. 截图
ffmpeg -i input.mp4 -ss 00:00:10 -vframes 1 screenshot.jpg
# 8. 降低视频质量(压缩)
ffmpeg -i input.mp4 -b:v 1000k output.mp4
⚠️ 9. 常见问题解决
问题1:找不到库文件
# 编辑动态库配置文件
sudo vim /etc/ld.so.conf.d/ffmpeg.conf
# 添加:/usr/local/ffmpeg/lib
# 然后执行:
sudo ldconfig
问题2:yasm/nasm错误
# 安装yasm
sudo apt-get install yasm
# 或编译时禁用(不推荐)
./configure --disable-yasm ...
问题3:权限问题
# 如果是普通用户安装,可能需要sudo
sudo make install
# 或安装到用户目录
./configure --prefix=$HOME/ffmpeg
make
make install
export PATH=$HOME/ffmpeg/bin:$PATH
问题4:缺少编码器
# 重新配置启用更多编码器
./configure --enable-libx264 --enable-libx265 --enable-libvpx ...
# 确保已安装对应的开发包
sudo apt-get install libx264-dev libx265-dev libvpx-dev
📊 10. 验证安装完整性
# 创建测试脚本 test_ffmpeg.sh
#!/bin/bash
echo "=== FFmpeg版本 ==="
ffmpeg -version | head -n 1
echo -e "\n=== 支持的编解码器数量 ==="
ffmpeg -codecs | wc -l
echo -e "\n=== 支持的格式数量 ==="
ffmpeg -formats | wc -l
echo -e "\n=== 主要组件位置 ==="
which ffmpeg
which ffprobe
which ffplay
echo -e "\n=== 库文件 ==="
ls /usr/local/ffmpeg/lib/*.so* | wc -l
# 运行测试
chmod +x test_ffmpeg.sh
./test_ffmpeg.sh
🗂️ 11. 安装后的目录结构
/usr/local/ffmpeg/
├── bin/
│ ├── ffmpeg # 主要程序
│ ├── ffprobe # 媒体分析工具
│ └── ffplay # 播放器
├── include/
│ └── libav* # 开发头文件
├── lib/
│ ├── libavcodec.so # 编解码库
│ ├── libavformat.so # 格式处理库
│ ├── libavutil.so # 工具库
│ └── pkgconfig/ # pkg-config文件
└── share/
├── man/ # 手册页
└── ffmpeg/ # 示例文件
🔄 12. 更新FFmpeg
# 如果需要更新版本
cd ffmpeg-3.2.2
make clean
git pull origin # 如果是git克隆的
./configure ... # 重新配置
make -j$(nproc)
sudo make install
这样就完成了 FFmpeg 的安装和配置!现在你可以在 Linux 上使用完整的 FFmpeg 功能了。