VS编写QT程序,如何向linux中移植?

一、大致流程

先用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

💡 最佳实践建议

  1. 使用版本控制:Git管理代码

  2. 持续集成:配置GitHub Actions或GitLab CI自动测试Linux构建

  3. 容器化:使用Docker确保环境一致性

    复制代码
    FROM ubuntu:20.04
    RUN apt-get update && apt-get install -y qt5-default g++
    COPY . /app
    WORKDIR /app
    RUN qmake && make
  4. 跨平台开发工具

    • 在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 功能了。

相关推荐
rainbow68893 小时前
C++STL list容器模拟实现详解
开发语言·c++·list
Boop_wu3 小时前
简单介绍 JSON
java·开发语言
超龄超能程序猿3 小时前
Python 反射入门实践
开发语言·python
Katecat996633 小时前
Faster R-CNN在药片边缘缺陷检测中的应用_1
开发语言·cnn
晚风_END3 小时前
Linux|操作系统|elasticdump的二进制方式部署
运维·服务器·开发语言·数据库·jenkins·数据库开发·数据库架构
嵌入小生0073 小时前
Standard IO -- Continuation of Core Function Interfaces (Embedded Linux)
linux·vim·嵌入式·标准io·vscode
devmoon3 小时前
Polkadot SDK 自定义 Pallet Benchmark 指南:生成并接入 Weight
开发语言·网络·数据库·web3·区块链·波卡
Zach_yuan3 小时前
传输层之TCP/UDP 核心原理全解析:从协议基础到实战机制
linux·网络协议·tcp/ip·udp
独自归家的兔3 小时前
Ubuntu 系统 systemd timers 详解:替代 crontab 的定时任务进阶方案
linux·运维·ubuntu