[software development] 同样一份代码,构建出来的东西不一样?
Tofloor
poster avatar
fozei
deepin
2024-04-29 09:25
Author

书接前文

deepin-editor的master分支,在Qt Creator 13.0.0版本中,可以正常加载项目,但是构建报错。那个报错估计和编译选项相关,或者Qt Creator自带的构建工具,使用的clang编译器?但是手动换成GCC编译器还是一样的错误:

:-1: error: src/CMakeFiles/deepin-editor.dir/encodes/detectcode.cpp.o: in function `DetectCode::detectTextEncoding(char const*, unsigned long, char**, QList&)':
/home/fozei/code/pc-gui/qt-project/deepin-editor/src/encodes/detectcode.cpp:-1: error: undefined reference to `ucsdet_open_70'
:-1: error: detectcode.cpp:(.text+0x28f0): undefined reference to `ucsdet_setText_70'
:-1: error: detectcode.cpp:(.text+0x2906): undefined reference to `ucsdet_detectAll_70'
:-1: error: detectcode.cpp:(.text+0x2970): undefined reference to `ucsdet_getName_70'
:-1: error: detectcode.cpp:(.text+0x29c4): undefined reference to `ucsdet_close_70'
:-1: error: collect2: error: ld returned 1 exit status
:-1: error: ninja: build stopped: subcommand failed.

然后找到报错的那个方法哪里,将代码注释掉,成功编译,但是这个界面,我有点不认识了:

截图_deepin-editor_20240428101457.png

而通过cmake构建出来的,就是咱们系统原汁原味的编辑器:

截图_deepin-editor_20240428101730.png

我就是想知道,这是为什么呢confused

Reply Favorite View the author
All Replies
许自强
deepin
Ecological co-builder
2024-04-29 09:41
#1

编译的时候影响结果的变量挺多的,比如编译参数、扩展库...

Reply View the author
Ziggy
deepin
2024-04-29 09:51
#2

要看你用的啥GCC,clang13/llvm13支持c++17,但v20的GCC8默认只是c++11,对c++17支持没那么好shamed

使用cmake来构建可能会好一点

Reply View the author
fozei
deepin
2024-04-29 10:03
#3
许自强

编译的时候影响结果的变量挺多的,比如编译参数、扩展库...

这个我倒是能理解的,让我费解的是使用命令行CMake构建,它是从根目录的CMakeLists.txt开始构建的,而Qt Creator加载一个项目时,也是从这个CMakeLists.txt开始的,两者来了个同途殊归doubt

Reply View the author
dxy2020
deepin
2024-04-29 10:04
#4

把你注掉的地方贴出来看看呢

Reply View the author
fozei
deepin
2024-04-29 10:05
#5
Ziggy

要看你用的啥GCC,clang13/llvm13支持c++17,但v20的GCC8默认只是c++11,对c++17支持没那么好shamed

使用cmake来构建可能会好一点

v20自带的,Uos 8.3.0.3-3+rebuild) 8.3.0,命令行构建没有任何问题,Qt Creator我还需要深入了解一下。目测官方开发人员也不是用的Qt Creator。

Reply View the author
fozei
deepin
2024-04-29 10:08
#6
dxy2020

把你注掉的地方贴出来看看呢

把这个方法体里面的逻辑都注释掉,只返回一个true就好了。但是这个方法是UI无关的。
image.png

Reply View the author
许自强
deepin
Ecological co-builder
2024-04-29 10:09
#7
fozei

这个我倒是能理解的,让我费解的是使用命令行CMake构建,它是从根目录的CMakeLists.txt开始构建的,而Qt Creator加载一个项目时,也是从这个CMakeLists.txt开始的,两者来了个同途殊归doubt

看下QtCreator的CMake和命令行里CMake的一些环境变量是不是不一致

Reply View the author
dxy2020
deepin
2024-04-29 10:13
#8
fozei

把这个方法体里面的逻辑都注释掉,只返回一个true就好了。但是这个方法是UI无关的。
image.png

那估计是g++编译的时候没有指定加载动态库之类的,所以主题没加载上

image.png

我看简单的dtk demo也是需要一些参数的

Reply View the author
fozei
deepin
2024-04-29 10:18
#9
许自强

看下QtCreator的CMake和命令行里CMake的一些环境变量是不是不一致

嗯嗯,是的,我推测也是这个样子的,不验证了,那一套东西看的眼花缭乱的,我想提交的PR,已经通过VS Code完成了applaud

Reply View the author