c - 在 Ubuntu 上使用库部署 C 程序的最佳实践

标签 c ubuntu

我编写了一个程序,其中包含 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 计算机的最简单的专业方法是什么?

最佳答案

Where on the ubuntu machine is libmariadb3 placed?

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>部分。

how is my program finding it?

来自您的gcc build 命令,我可以看到您使用 $() 进行了一些命令替换。 mariadb_config --include --libs我认为命令应该包含要包含的库列表。告诉我们您的输出是什么。

这些库将位于 /usr/lib 中,我认为。

mariadb_config --include --libs 的输出是什么和dpkg -L libmariadb3dpkg -L libmariadb-dev

(most importantly) which parts of the libmariadb3 library do I need to deploy (run, not build) on a different machine?

我不是 100% 确定,但我认为他们需要与您相同的库和 header 。也许他们需要的更少,但我想,拥有和你一样的东西也没什么坏处。

...and what is the best way to do that?

what's the simplest professional way to deploy a small simple application to a target Ubuntu machine?

我不知道要在 apt 中添加一些内容包管理器,以便他们可以运行 sudo apt install whatever .

根据我迄今为止使用 Ubuntu 的经验,我想说除此之外还有 3 个不错的选择:

  1. 选项 1:自己为 Ubuntu 构建应用程序,只需向我们提供可执行文件和用于安装依赖项的命令即可。我们运行命令来安装依赖项,然后将可执行文件移至 /usr/bin/所以我们可以使用它。更好的是,我们将其放入 ~/bin所以它不会困惑/usr/bin 。然后我们必须添加 ~/bin到我们的 PATH,Ubuntu 在 ~/.profile 中自动为我们做了这个文件,如果我们在创建 ~/bin 后关闭并重新打开所有终端第一次。您可以将可执行文件放入 GitHub 页面上的 GitHub“版本”中,以便我们下载。

  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 由您决定。

    另一个类似的例子在这里:https://github.com/junegunn/fzf#using-git 。重点是:我们运行一个安装脚本。

    另一个非常好的例子:https://github.com/ElectricRCAircraftGuy/BrosTrendWifiAdapterSoftware :

    sh -c 'busybox wget deb.trendtechcn.com/install -O /tmp/install && sh /tmp/install'
    

注意:在上述任何选项中,如果您想要一个漂亮的 GUI 启动器按钮,我们可以单击来启动您刚刚提供给我们的新程序,您需要将 .desktop 文件添加到 /usr/share/applications/$HOME/.local/share/applications/为了我们。请参阅Ask Ubuntu: Where are the .desktop icon files stored? .

关于c - 在 Ubuntu 上使用库部署 C 程序的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77297748/

相关文章:

c - EVP_PKEY_keygen() 将 key 对生成为字符串?

python - 将 Setuptools 与 C 扩展一起用作包的一部分

javascript - ESLint - Airbnb 可以安装在 Ubuntu 16.04 Sublime Text 3 上吗

ruby - 错误消息 : cannot get Oracle version from sqlplus

linux - 如何在目录中找到最新的文件夹,然后相应地创建完整路径?

ubuntu - 无法在 Ubuntu 16.04 上安装 Swift 4

c - For 循环表达式结果未使用,但代码仍然有效,出了什么问题?

c - 对不同结构类型的指针进行类型转换是否合法(例如,将 struct sockaddr * 转换为 struct sockaddr_in6 *)?

c - 如何在c中读取大(593683字节)文件?

node.js - 尝试从 ubuntu 12.04 源安装 npm 时出现错误