C++新手,求助一个关于怎么使用第三方库的问题

353 天前
 WangLiCha

可能有点长,因为我也不知道我哪一步出错了,所以尽量多写一点信息:

之前完全没有做过 C++,因为项目需求临时看了下 C++和 Qt 的资料开始做东西; 之前电脑里装了 Viusal Studio 2022 ,所以电脑上是 2022 版本的 MSVC 组件,然后 Qt 在版本选型的时候考虑用的是 5.12.12 。这个版本安装包带的 MSVC 的库还是 2017 版本的,但是实际原生开发没有遇到问题,可以正常编译运行。

接下来有一个要解析展示 LaTeX 表达式的需求,找了下 GitHub 上有一个 JKQtPlotter 项目满足我的需求。按照我的理解,把 GitHub 上的库 clone 到本地,然后按照说明文档用 CMake 编译

cmake -G "Visual Studio 17 2022" "-DCMAKE_PREFIX_PATH=D:\Qt\Qt5.12.12\5.12.12\msvc2017_64"  ..
cmake --build . --config "Debug"
cmake --install . --config "Debug"

然后在 Qt Creator 里添加库,选择编译生成好又安装完成的.lib 文件,实际在 Qt Creator 写代码的时候也能正常给出这个库的代码提示。

但是编译无法通过,提示找不到函数……

我怀疑可能是编译器不匹配的问题,所以用 VS 安装工具单独安装了 MSVC2017 的生成器,但是安装完成过后 Qt Creator 依然是找不到 MSVC2017 ,CMake 的参数传-G "Visual Studio 15 2017"同样报错说找不到。

所以想请问一下这些操作步骤大概是哪里的问题?应该怎么去解决比较好?

之前只做过 C#和前端的项目,Nuget 和 npm 确实方便,甚至偶尔写过一点 Python 都有 pip ,相比之下 C++用起第三方库感觉真的好麻烦……

3749 次点击
所在节点    C++
26 条回复
Nosub
353 天前
建议用 vcpkg ,大部分第三库都有,不过要配合 vs 门槛更低,花点时间学习下 vcpkg ,如果要更进一步,需要学习下 cmake 脚本语言,学习 C++就是这样,库管理乱的一塌糊涂,c++ 20 才引入 Module ,只能等时间积累,你要对比 Maven 或是 npm ,只能说 c++还有很长的路要走,不过大部分项目,也会提供库的使用方法,无非是你现在不懂 cmake ;
snylonue
351 天前
@guyeu 最近就在试用 conan (windows),qt 装不上,fltk 装完以后 cmake 找不到
SHIINASAMA
351 天前
@WangLiCha 因为 vcpkg 导入包基本都是从源码在本地构建的,如果你直接用来导入 Qt 的,那相当于编译一次 Qt ,更何况 Qt 的每个模块其实都挺大的。Qt 用预编译的安装包,其他不是很重量级的依赖可以用 vcpkg 管理,这个是可行的,我试过预编译的 Qt + vcpkg 的 ffmpeg ,没问题。
WangLiCha
351 天前
@SHIINASAMA 测试了一下,vcpkg 安装 jkqtplotter 会下载编译 Qt 源代码……

Building qtbase[brotli,concurrent,core,dbus,default-features,doubleconversion,freetype,gui,harfbuzz,icu,jpeg,network,opengl,openssl,pcre2,png,sql,sql-psql,sql-sqlite,testlib,thread,widgets,zstd]:x64-windows@6.7.0...
-- Downloading https://download.qt.io/archive/qt/6.7/6.7.0/submodules/qtbase-everywhere-src-6.7.0.tar.xz;https://mirrors.ocf.berkeley.edu/qt/archive/qt/6.7/6.7.0/submodules/qtbase-everywhere-src-6.7.0.tar.xz -> qtbase-everywhere-src-6.7.0.tar.xz...
-- Extracting source C:/dev/vcpkg/downloads/qtbase-everywhere-src-6.7.0.tar.xz
-- Applying patch allow_outside_prefix.patch
-- Applying patch config_install.patch
-- Applying patch fix_cmake_build.patch
-- Applying patch harfbuzz.patch
-- Applying patch fix_egl.patch
-- Applying patch fix_egl_2.patch
-- Applying patch installed_dir.patch
-- Applying patch GLIB2-static.patch
-- Applying patch clang-cl_source_location.patch
-- Applying patch clang-cl_QGADGET_fix.diff
-- Applying patch fix-host-aliasing.patch
-- Applying patch env.patch
-- Applying patch dont_force_cmakecache_latest.patch
-- Using source at C:/dev/vcpkg/buildtrees/qtbase/src/here-src-6-7448f7f6e6.clean
-- Downloading https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_5380_5361/strawberry-perl-5.38.0.1-64bit-portable.zip -> strawberry-perl-5.38.0.1-64bit-portable.zip...
-- Downloading https://www.python.org/ftp/python/3.11.8/python-3.11.8-embed-amd64.zip -> python-3.11.8-embed-amd64.zip...
-- Found external ninja('1.10.2').
-- Configuring x64-windows
-- Building x64-windows-dbg
SHIINASAMA
350 天前
@WangLiCha 🤔那就看这个编译时长你能不能接受了,不能就用预编译的咯。我主要想表达的是预编译包+vcpkg 是可行的...
mz135135
136 天前
和楼主一样的遭遇,想学习搞下 c++,平常都是 java c# python 之类的加入第三方库很方便,问题也很少,就找了一个 c++库,引入进来。报了一堆错,还要编译啥的一天都没搞定。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/1040699

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX