三方库移植

gcc默认头文件搜索路径

  • /usr/include
  • /usr/local/include/

注:<>修饰的头文件只搜索系统路径,""修饰的头文件先搜索当前路径,如果当前路径找不到,再搜索系统路径。

gcc默认库搜索路径

  • /lib
  • /usr/lib

查看程序依赖库的命令:ldd <程序名>

例:移植sqlite3

  1. 从官方网站或者gitub等获取源码。
  2. 解压(不能在windows解压,必须在linux中用命令解压)源码并进入目录:tar xf 安装包名称
  3. 在源码目录新建work目录以便后续的安装。
  4. 配置编译选项。
  5. configure是一个可执行的配置脚本(用来生成Makefile)
  6. --host:指定编译器
  7. --prefix:指定安装目录(如果不指定此选项,那么默认安装到系统路径)
  8. ./configure --prefix=$PWD/work
  9. 如果是交叉编译,给ARM板用:./configure --host=arm-linux- --prefix=$PWD/work
  10. 编译:make
  11. 安装 make install,这个install它是Makefile中的一个目标,会自动把生成的内容拷贝到上面指定的文件夹中。
  12. 安装成功以后,install目录会有:头文件、库文件、可执行程序

 测试

gcc 源文件 -I <头文件路径> -l<库名称> -L <库路径> -o <生成文件名>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sqlite3.h>

int main(int argc, const char *argv[])
{
    sqlite3 *db = NULL;

    if (argc != 2)
    {
        printf("usage:%s <db_name>\n", argv[0]);
    }
  
    if (sqlite3_open(argv[1], &db) != SQLITE_OK)
    {
        printf("err\n");
        exit(EXIT_FAILURE);
    }

    sqlite3_close(db);

    return 0;
}

错误

以上错误代表找不到头文件,需要指定头文件的目录

  • 指定头文件目录:-I(大i)

$ gcc sqlite1.c -I ./include/
/tmp/ccC4FKo5.o: In function `main':
sqlite1.c:(.text+0x58): undefined reference to `sqlite3_open'
sqlite1.c:(.text+0x85): undefined reference to `sqlite3_close'
collect2: error: ld returned 1 exit status

以上错误代表找不到库文件,需要指定库文件目录和所用的库

  • 指定库路径:-L
  • 指定库名称:-l(小L)小l选项后面跟的名字会前加lib,后加.so查找库,比如-l sqlite3,那么编译时会去链接libsqlite3.so这个库文件。

 

### 如何在 C++ 中引入和使用第三方库 #### 一、选择合适的第三方库 在开发过程中,选择适合的第三方库至关重要。开发者应根据项目的具体需求评估可用的功能、性能以及社区支持等因素[^1]。 #### 二、集成第三方库 集成第三方库通常涉及以下几个方面: 1. **获取库文件** 开发者可以通过官方网站或其他可信渠道下载所需的第三方库。某些情况下可能需要手动编译源码以生成目标平台上的动态链接库 (DLL) 或静态库 (.lib)[^3]。 2. **配置环境变量** 如果使用的 IDE 是 Visual Studio,则需调整项目属性中的 `VC++ 目录` 设置。这一步骤包括向 `包含目录` 和 `库目录` 添加对应路径。 3. **编辑构建工具链配置** 对于 VSCode 用户而言,除了安装适当的编译器外(如 MinGW),还需修改其 settings.json 文件来指明头文件位置 (`-I`) 及库所在的位置 (`-L`) 。例如通过命令行执行如下语句完成初步测试[^4]: ```bash g++ main.cpp -L'C:\path\to\libs' -I'C:\path\to\headers' -lmylibrary -o output.exe ``` #### 三、编写代码并调用功能 一旦完成了上述准备工作之后,便可以在程序里利用这些外部资源了。下面给出一段简单的示范代码展示如何加载 libxl 库读取 Excel 表格数据[^2]: ```cpp #include <iostream> #include "libxl.h" int main() { libxl::Book* book = xlCreateBook(); // 创建一个新的工作簿对象 if(book->load(L"example.xls")) { // 尝试打开名为 example 的 xls 文件 libxl::Sheet* sheet = book->getSheet(0); if(sheet){ std::wstring cellValue = sheet->readStr(1, 1); std::wcout << L"The value at A1 is: " << cellValue << std::endl; } book->release(); } else{ std::cerr << "Failed to load file!" << std::endl; } return 0; } ``` #### 四、维护与更新第三方库 随着时间推移和技术进步,保持所依赖软件包处于最新状态有助于修复已知漏洞、提升兼容性和获得新特性。因此定期审查现有依赖关系列表,并及时升级至稳定版本显得尤为重要。 #### 五、注意事项 最后需要注意几点事项:确保遵循许可证条款;验证安全性风险;考虑跨平台移植性等问题。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值