我已经编写了一个程序,该程序集成了MariaDB C连接库来连接MariaDB并与其交互.基本上,我遵循了MariaDB网站上的步骤:

  1. 从带有sudo apt install libmariadb3 libmariadb-dev的端子安装连接器
  2. #include <mysql.h&>添加到要与MariaDB对话的C或C++文件
  3. 添加对我的构建命令的引用,如下所示:gcc -o program main.c $(mariadb_config --include --libs)

这招很管用.但我只是按照指示行事,缺乏一些基本知识,如

  • 在ubuntu机器上,libmariadb3放在哪里?
  • 我的程序是如何找到它的?
  • (最重要的是)我需要在不同的机器上部署(运行,而不是构建)libmariadb3库的哪些部分,最好的方法是什么?

最后一个是最大的;将一个小的简单的应用程序部署到目标Ubuntu机器上的最简单的专业方法是什么?

推荐答案

在ubuntu机器上,libmariadb3放在哪里?

sudo apt install libmariadb3 libmariadb-dev中,您正在安装库.我猜动态共享对象.so库和静态.a库都在类似/usr/lib的地方.与这些库一起使用的头文件可能在/usr/include中.仔细调查一下,告诉我们你发现了什么.

运行dpkg -L libmariadb3dpkg -L libmariadb-dev查看它们的安装位置.将输出添加到您的问题的底部.

apt list --installed可以列出所有已安装的软件包,以防你需要用dpkg -L <name>判断其他软件包,但不知道<name>部分.

我的程序是如何找到它的?

从您的gcc构建命令中,我可以看到您对$()进行了一些命令替换.我认为,mariadb_config --include --libs命令应该包含要包含的库的列表.告诉我们你的yields 是多少.

我认为,这些图书馆将达到/usr/lib个.

mariadb_config --include --libsdpkg -L libmariadb3dpkg -L libmariadb-dev的输出是多少?

(最重要的是)我需要在不同的机器上部署(运行,而不是构建)libmariadb3库的哪些部分?

请参见上面的.它们将需要与您相同的库和头文件.

……最好的办法是什么?

将一个简单的小应用程序部署到目标Ubuntu机器上最简单的专业方法是什么?

我不知道把什么东西放到apt包管理器中,这样他们就可以运行sudo apt install whatever了.

根据我到目前为止在Ubuntu上的经验,除了这一点,你还有3个很好的 Select :

  1. 选项1:自己为Ubuntu构建应用程序,只需给我们可执行文件和安装依赖项所需的命令即可.我们运行命令来安装依赖项,然后将可执行文件移到/usr/bin/,这样我们就可以使用它了.您可以将可执行文件放入GitHub页面上的GitHub"Release"中.

  2. 选项2:您为我们提供了出色的从源代码构建的说明,而我们则从源代码构建.这是许多GNU程序上的常见风格:

    wget some_package.tar.gz
    tar -xf some_package.tar.gz  # unzip it
    cd some_package
    ./configure
    make
    sudo make install
    

    但只要它起作用,我并不关心构建命令是什么样子的.

  3. 选项3:将所有内容打包到一个安装bash脚本中,我们只需下载并在一个命令中运行它,如下所示:

    curl -L https://some_github_path | /bin/bash
    

    例如:https://github.com/nicolargo/glances#glances-auto-install-script-the-easy-way(当然,这是一个Python程序,但概念是相同的)

    这个选项3在幕后是选项1还是选项2取决于你自己.

注意:在上面的任一选项中,如果你想要一个我们可以点击的漂亮的图形用户界面启动器按钮,你需要为我们添加一个桌面文件到/usr/share/applications/$HOME/.local/share/applications/.请参见Ask Ubuntu: Where are the .desktop icon files stored?.

C++相关问答推荐

无效使用未定义类型'structsquare'?

为什么在4.9.37版的内核中,kfio还需要smp_wmb呢?

GCC预处理宏和#杂注GCC展开

为什么I2C会发送错误的数据?

为什么sscanf不能正确地从这个字符串格式中提取所有数字?

为什么该函数不将参数值保存到数据 struct 中?

Char变量如何在不使用方括号或花括号的情况下存储字符串,以及它如何迭代到下一个字符?

函数内的局部字符指针

为什么我的Hello World EFI程序构建不正确?

getline()从c中的外部函数传递指针时输出null

如何使用C++在控制台中以彩色打印被阻止的客户端

在函数外部使用内联ASM时无法指定操作数

是否定义了此函数的行为?

将非连续物理内存映射到用户空间

try 查找带有指针的数组的最小值和最大值

使用 strtok 多次分割一个字符串会导致意外行为

为什么 Linux 共享库 .so 在内存中可能比在磁盘上大?

为什么INT_MIN是在c语言的头文件limits.h中定义的(-INT_MAX-1)而不是直接使用-2147483648

OpenGL 中的非渐变 colored颜色 变化

C23 中是否有 __attribute__((nonnull)) 的等效项?