Linux环境下如何使用通过vcpkg安装的C语言库?
vcpkg安装C/C++库后的编译链接操作步骤(Ubuntu 20.04环境)
以下操作默认你已经完成vcpkg初始化和目标库(以libwebsockets为例)的安装,操作逻辑适用于所有通过vcpkg安装的第三方库。
前置说明
用<vcpkg-root>指代你本地vcpkg的根目录,也就是你执行git clone生成的vcpkg文件夹的绝对路径,比如家目录下的vcpkg路径为/home/你的用户名/vcpkg,后续命令中请自行替换为实际路径。
方式1:gcc手动编译单文件
适合测试单个小文件的场景,编译命令需要手动指定vcpkg的头文件、库文件搜索路径:
gcc 你的测试文件名.c -o 输出的可执行文件名 -I <vcpkg-root>/installed/x64-linux/include -L <vcpkg-root>/installed/x64-linux/lib -lwebsockets
参数说明:
-I:指定头文件搜索路径,vcpkg安装的所有库的头文件都统一存放在该目录下-L:指定静态/动态库搜索路径,vcpkg安装的所有库的二进制文件都统一存放在该目录下-l:指定要链接的库名,规则为去掉库文件名的lib前缀和.so/.a后缀,比如libwebsockets.so对应的参数就是-lwebsockets
如果编译其他通过vcpkg安装的库,只需修改-l后的库名即可,路径参数无需改动。
运行时如果提示找不到动态库,可以把
<vcpkg-root>/installed/x64-linux/lib添加到LD_LIBRARY_PATH环境变量后再运行。
方式2:CMake项目编译(更推荐)
vcpkg和CMake原生适配,不需要手动处理路径,适合多文件项目场景:
- 在项目根目录创建
CMakeLists.txt,内容示例如下:
cmake_minimum_required(VERSION 3.10) # 替换为你自己的项目名 project(lws_test) # 替换为你自己的源码文件和输出可执行文件名 add_executable(lws_demo test_lws.c) # 查找vcpkg安装的libwebsockets库 find_package(libwebsockets CONFIG REQUIRED) # 链接库到目标可执行文件 target_link_libraries(lws_demo PRIVATE websockets::websockets)
- 执行CMake配置命令,指定vcpkg提供的工具链文件:
cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=<vcpkg-root>/scripts/buildsystems/vcpkg.cmake
- 执行编译命令:
cmake --build build
- 编译完成的可执行文件存放在
build目录下,直接运行即可:
./build/lws_demo
如果使用其他vcpkg安装的库,只需修改find_package和target_link_libraries的库名即可,工具链参数为通用配置不需要改动。
可选:全局生效配置
如果不想每次编译都手动指定路径,可以在~/.bashrc文件末尾添加以下环境变量配置:
export C_INCLUDE_PATH=<vcpkg-root>/installed/x64-linux/include:$C_INCLUDE_PATH export CPLUS_INCLUDE_PATH=<vcpkg-root>/installed/x64-linux/include:$CPLUS_INCLUDE_PATH export LIBRARY_PATH=<vcpkg-root>/installed/x64-linux/lib:$LIBRARY_PATH export LD_LIBRARY_PATH=<vcpkg-root>/installed/x64-linux/lib:$LD_LIBRARY_PATH
保存后执行source ~/.bashrc生效,之后gcc编译不需要再加-I和-L参数,直接使用gcc test_lws.c -o test_lws -lwebsockets即可完成编译。
内容的提问来源于stack exchange,提问作者tehkonst
相关产品推荐
相关产品推荐

