我编写了一个程序,其中包含 MariaDB C 连接器库来与 MariaDB 连接和交互。我按照 MariaDB 网站上的步骤进行操作,基本上是:
- 从终端安装连接器
sudo apt install libmariadb3 libmariadb-dev
- 添加
#include <mysql.h
> 到想要与 MariaDB 对话的 C 或 C++ 文件 - 添加对我的构建命令的引用,如下所示:
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 libmariadb3
和dpkg -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 libmariadb3
和dpkg -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:自己为 Ubuntu 构建应用程序,只需向我们提供可执行文件和用于安装依赖项的命令即可。我们运行命令来安装依赖项,然后将可执行文件移至
/usr/bin/
所以我们可以使用它。更好的是,我们将其放入~/bin
所以它不会困惑/usr/bin
。然后我们必须添加~/bin
到我们的 PATH,Ubuntu 在~/.profile
中自动为我们做了这个文件,如果我们在创建~/bin
后关闭并重新打开所有终端第一次。您可以将可执行文件放入 GitHub 页面上的 GitHub“版本”中,以便我们下载。选项 2:您为我们提供出色的从源代码构建说明,然后我们从源代码构建。这是许多 gnu 程序中的常见样式:
wget some_package.tar.gz tar -xf some_package.tar.gz # unzip it cd some_package ./configure make sudo make install
但只要它有效,我不在乎你的构建命令是什么样的。
选项 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/